1

カスタムおよびカスタムレイアウトにExpandableListView裏打ちされた標準があります。CursorTreeAdapter画面を 2 回回転すると (つまり、縦方向から横方向に回転させてから縦方向に戻すか、横方向から縦方向に戻してから横方向に戻す)、すべてのグループが折りたたまれているように見え、再度展開することはできません。さらに回転しても何も変わりません。

これがなぜなのか、誰かが知っているでしょうか?子カーソルはまだアクティブであるように見え、オーバーライドまたはリスナーを使用して、折りたたみの試みに関係なくグループを強制的に展開したままにすることもできません (予期されるように、展開されたときにユーザーが状態を変更できないようにすることを除いて)。 .

誰かが必要とする場合は、投稿を更新してコードまたはレイアウトを提供できます。

4

3 に答える 3

0

3日間検索した後、多くの解決策を試してください。根本的な原因は非常に単純であることがわかりました。

onCreateView関数で、すべてのグループを展開してください

mExpandableListView.expandGroup(INCOMPLETE_INDEX, true);
于 2015-06-04T03:55:26.013 に答える
0

同様のタスクに問題があります。カスタム グループ/アイテム ビューを使用して Fragment に配置された ExpandableListview。私の解決策は、この回答に基づいて SharedPreferences を使用することです。最適ではないかもしれませんが (私は Java/Android を 1 か月未満しか学習していません)、機能したのは 1 つだけです。バンドルを介した保存/復元は機能しません:(

  1. 展開された状態を収集して設定するための 2 つのメソッドを記述します。

    private ArrayList<Long> getExpandedIds() {
      // private ExpandableListView lv defined above
      BaseExpandableListAdapter adp = (BaseExpandableList) lv.getExpandableListAdapter();
    
      if (adp != null) {
        int sz = adp.getGroupCount();
        ArrayList<Long> ids = new ArrayList<Long>();
        for (int i=0; i<sz; i++) 
            if lv.isGroupExpanded(i)) ids.add(adp.getGroupId(i));
        return ids;
      } else {
        return null;
      }
    }
    
    private void setExpandedIds(ArrayList<Long> ids) {
    
        if ((ids == null) || (ids.size()==0)) return;
    
        BaseExpandableListAdapter adp = (BaseExpandableListAdapter) lv.getExpandableListAdapter();
        if (adp != null) {
            int sz = adp.getGroupCount();
            for (int i=0;i<sz;i++) {
                long id = adp.getGroupId(i);
                for (long n : ids) {
                    if (n == id) {
                        lv.expandGroup(i);
                        break;
                    }
                }
            }
        }
    }
    
  2. 上記のメソッドを使用して、SharedPreferences で状態を保存および復元します。

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    
        ArrayList<Long> expIds = getExpandedIds();
        if (expIds != null) {
            try {
                @SuppressWarnings("ConstantConditions")
                SharedPreferences pref = this.getActivity().getPreferences(Activity.MODE_PRIVATE);
                SharedPreferences.Editor ed = pref.edit();
                String s = TextUtils.join(";", expIds.toArray());
                ed.putString(LV_NAME, s);
                ed.commit();
            } catch (NullPointerException e) {
                Log.e("YAMK", "Store prefs failed.");
            }
        }
    }
    
    // in onCreateView:
    try {
        @SuppressWarnings("ConstantConditions")
        SharedPreferences pref = getActivity().getPreferences(Activity.MODE_PRIVATE);
        ArrayList<Long>expIds = new ArrayList<Long>();
        for (String s : TextUtils.split(pref.getString(LV_NAME, ""), ";")) {
            expIds.add(Long.parseLong(s));
        }
    } catch (NullPointerException e) {
        //
    }
    setExpandedIds(expIds);
    
于 2013-09-20T11:12:17.760 に答える