3

AndroidでExpandableListViewの状態(折りたたまれているアイテムと折りたたまれていないアイテム)を保存して復元することは可能ですか?

可能であれば、どうすればそれを行うことができますか?

onPause() / onResume() で ExpandableListView にアクセスできますか?

4

4 に答える 4

4

グループを繰り返し処理し、それらすべての状態を保存します。

int numberOfGroups = MyExpandableListViewAdapter.getGroupCount();
boolean[] groupExpandedArray = new boolean[numberOfGroups];
  for (int i=0;i<numberOfGroups;i++)
    groupExpandedArray[i] = MyExpandableListView.isGroupExpanded(i);

次に、状態を復元します。

for (int i=0;i<groupExpandedArray.length;i++)
  if (groupExpandedArray[i] == true)
    MyExpandableListView.expandGroup(i);

onPause() / onResume() で ListView にアクセスする方法の意味がわかりません。ListView オブジェクトをアクティビティ クラスのメンバーとして格納すると、そこからアクセスできるはずです。

于 2012-06-05T21:20:45.563 に答える
3

Floaf の回答の改善: 宣言

 public static int firstVisiblePosition=0;

一時停止中

int numberOfGroups = MyExpandableListViewAdapter.getGroupCount();
boolean[] groupExpandedArray = new boolean[numberOfGroups];
for (int i=0;i<numberOfGroups;i++){
    groupExpandedArray[i] = MyExpandableListView.isGroupExpanded(i);
}
firstVisiblePosition = MyExpandableListView.getFirstVisiblePosition();

onResume

for (int i=0;i<groupExpandedArray.length;i++){
  if (groupExpandedArray[i] == true)
      MyExpandableListView.expandGroup(i);
}
MyExpandableListView.setSelection(firstVisiblePosition );

これにより、各グループの状態が復元されるだけでなく、アクティビティが一時停止されたときに表示されていた childView までスクロールされます。

于 2014-03-23T20:54:25.263 に答える
0

このまったく同じ質問に出くわし、より良い答えを見つけました。フラグメントがあり、onSaveInstanceStateonViewStateRestoredを使用してExpandableListViewを保存および復元します。

ここでリストの状態を保存します

@Override
public void onSaveInstanceState( @NonNull Bundle outState )
{
    super.onSaveInstanceState( outState );

    ExpandableListView expandable = getView() != null ? getView().findViewById( R.id.expandable ) : null;
    if( expandable != null )
    {
        int groupsCount = expandable.getExpandableListAdapter()
                                    .getGroupCount();
        boolean[] groupExpandedArray = new boolean[groupsCount];
        for( int i = 0; i < groupsCount; i += 1 )
        {
            groupExpandedArray[i] = expandable.isGroupExpanded( i );
        }
        outState.putBooleanArray( "groupExpandedArray", groupExpandedArray );
        outState.putInt( "firstVisiblePosition", expandable.getFirstVisiblePosition() );
    }
}

そして、ここで必要なときに復元します

@Override
public void onViewStateRestored( @Nullable Bundle savedInstanceState )
{
    super.onViewStateRestored( savedInstanceState );
    if( savedInstanceState != null )
    {
        boolean[]          groupExpandedArray   = savedInstanceState.getBooleanArray( "groupExpandedArray" );
        int                firstVisiblePosition = savedInstanceState.getInt( "firstVisiblePosition", -1 );
        ExpandableListView expandable           = getView() instanceof ViewGroup ? getView().findViewById( R.id.expandable ) : null;
        if( expandable != null && groupExpandedArray != null )
        {
            for( int i = 0; i < groupExpandedArray.length; i++ )
            {
                if( groupExpandedArray[i] )
                    expandable.expandGroup( i );
            }
            if( firstVisiblePosition >= 0 )
                expandable.setSelection( firstVisiblePosition );
        }
    }
}
于 2018-07-17T12:28:42.507 に答える