0

我在片段中有一个可展开的列表视图,并在列表的 onGroupExpand 函数中将列表设置为一次仅展开一行。活动运行时一切正常。一旦从保存的实例状态恢复活动,就永远不会调用函数 onGroupExpand。我试图重置列表的侦听器,但仍然无法正常工作。

下面是控制组扩展功能的代码。

    private void setListExpandListener()
        {
            final ExpandableListView list = (ExpandableListView)getActivity().findViewById(android.R.id.list);
            list.setEmptyView(getView().findViewById(R.id.no_mixes_empty_list_view));
            list.setOnGroupExpandListener(new OnGroupExpandListener() 
            {   
                @Override
                public void onGroupExpand(int groupPosition) 
                { 
                    collapseGroupAtPosition(list, groupPosition);
                }
            });
        }



 private void collapseGroupAtPosition(ExpandableListView list,int position)
        {
            if (parentRowPosition != -1 && parentRowPosition != position) 
            {
                list.collapseGroup(parentRowPosition);  
            }
            parentRowPosition = position;
        }

我正在尝试保存变量 parentRowPosition 的状态并在片段的恢复状态中检索。

检索工作正常,但侦听器现在不起作用,列表的所有行都可以一次展开。

这是设置侦听器的代码:-

    public void onViewCreated(View view, Bundle savedInstanceState)
        {
            mAdapter = new SavedTankExpandableListAdapter(getActivity());
            mAdapter.setDeleteListener(this);
            setListExpandListener();
            setListenersForViews();
            setOverlayAccordingToAppLaunchCount();
            super.onViewCreated(view, savedInstanceState);

        }

     public void onActivityCreated(Bundle savedInstanceState) 
            {
                super.onActivityCreated(savedInstanceState);
                onRestoreState(savedInstanceState);
            }

    public void onRestoreState(Bundle savedInstanceState)
{
    if(savedInstanceState==null)
        return;
    parentRowPosition=savedInstanceState.getInt("parentRowPosition",0);

    Utility.LHTLogs("Parent Row Position "+ parentRowPosition, true);
    if(mAdapter==null)
        mAdapter = new SavedTankExpandableListAdapter(getActivity());
    setListExpandListener();
}

任何帮助,将不胜感激。

4

2 回答 2

0

摘自 developer.google:

public void onViewCreated (View view, Bundle savedInstanceState) 在 API 级别 13 中添加

在 onCreateView(LayoutInflater, ViewGroup, Bundle) 返回后立即调用,但在任何保存的状态恢复到视图之前。一旦子类知道他们的视图层次结构已经完全创建,这给了子类一个初始化自己的机会。然而,片段的视图层次结构此时并未附加到其父级。

参数

view: onCreateView(LayoutInflater, ViewGroup, Bundle) 返回的View。

savedInstanceState:如果非空,则此片段将从此处给出的先前保存状态重新构建。

于 2013-08-12T11:36:17.340 回答
0

侦听器设置在哪里,您确定在重新启动后再次设置它,以防您在 OnStop 或其他任何地方拔下侦听器?如果不查看完整的源代码,就无法像您这样回答问题。

于 2013-08-12T10:41:52.493 回答