0

フラグメントに展開可能なリスト ビューがあり、リストの onGroupExpand 関数で一度に 1 行だけ展開するようにリストを設定しました。アクティビティが実行されている間、すべてが正常に機能します。アクティビティが保存されたインスタンスの状態から再開されると、関数 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

OnStop または他の場所でリスナーを取り外した場合に備えて、リスナーはどこに設定されていますか? また、再起動後に再度設定されていることを確認しますか? そして、あなたのような質問は、完全なソース コードを見なければ答えられません。

于 2013-08-12T10:41:52.493 に答える