【问题标题】:ExpandableListView with custom controls in androidandroid中带有自定义控件的ExpandableListView
【发布时间】:2015-01-26 19:17:21
【问题描述】:

我正在开发一个具有书籍树结构的应用程序,我在带有可扩展列表视图的侧导航菜单中显示书籍名称,单击书籍名称时,它会显示子列表中的章节。但是,在我的情况下,我需要以不同的方式,当用户点击书名时,它应该打开 ChaptersFragment 并在那里显示章节列表,当用户点击展开图标时,章节应该显示在可展开列表中。

mDrawerListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {

        @Override
        public boolean onGroupClick(ExpandableListView parent, View v,
                                    int groupPosition, long id) {

            return false;
        }
    });

    // Listview Group expanded listener
    mDrawerListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {

        @Override
        public void onGroupExpand(int groupPosition) {

        }
    });

    // Listview Group collasped listener
    mDrawerListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {

        @Override
        public void onGroupCollapse(int groupPosition) {


        }
    });

    // Listview on child click listener
    mDrawerListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {

        @Override
        public boolean onChildClick(ExpandableListView parent, View v,
                                    int groupPosition, int childPosition, long id) {
            // TODO Auto-generated method stub

            return false;
        }
    });

【问题讨论】:

    标签: android expandablelistview


    【解决方案1】:

    您需要对 Activity 进行回调,以说明单击了哪个项目。然后activity需要获取信息来填充一个新的Fragment并使用FragmentManager来交换新的Fragment。

    在 NavigationDrawerFragment 中:

    private NavigationDrawerListener mCallback;
    
    @Override
    public void onAttach(Activity activity) {
        super.OnAttach(activity);
    
        try {
            mCallback = (NavigationDrawerListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException("...");
        }
        ...
    }
    ...
        @Override
        public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
            mCallback.onNavigationItemClicked(groupPosition);
        }
    ...
    public static interface NavigationDrawerListerner {
        public void onNavigationItemClicked(int groupPosition)
    }
    ...
    

    在活动中

    ...
    @Override
    public void onNavigationItemClicked(int groupPosition) {
        Bundle args = getFragmentInformation(); //somehow
        Fragment newFragment = YourFragment.newInstance(args);
        getFragmentManager().beginTransaction().
                .replace(R.id.your_container), newFragment) //whatever ViewGroup contains the fragment
                .commit();
    }
    ...
    

    【讨论】:

    • 感谢@seiterm,但我需要执行这两个操作.. 我的意思是,当用户点击指标时,它应该展开列表.. 我们如何实现这一目标
    • 扩展列表是默认行为。我假设当听众不存在时这是有效的。您是否尝试过不消费该事件(返回 false)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多