1

そのため、私のメイン アクティビティでは、NavigationView をセットアップしました。これには、「My Projects」というタイトルのサブメニューと「Shared Projects」というタイトルのサブメニューの合計 2 つが含まれています。アクティビティが作成されると、サーバーからプロジェクトを取得し、次の方法でドロワーに追加するように設定しました。

    Menu menu = navigationView.getMenu();
    Menu myProjects = menu.findItem(R.id.myProjects).getSubMenu();
    Menu sharedProjects = menu.findItem(R.id.sharedProjects).getSubMenu();

    for (int i = 0; i < myProjectList.size(); i++) {
        myProjects.add(myProjectList.get(i).getTitle()).setIcon(R.drawable.ic_keyboard_arrow_right_black_24dp);
    }

    for (int i=0; i<sharedProjectList.size(); i++) {
        sharedProjects.add(sharedProjectList.get(i).getTitle()).setIcon(R.drawable.ic_keyboard_arrow_right_black_24dp);
    }

    MenuItem mi = menu.getItem(menu.size() - 1);
    mi.setTitle(mi.getTitle());

これは問題なく機能し、探していた出力が得られます。ただし、この機能を拡張して、ユーザーがアプリで新しいプロジェクトを作成した場合、アクティビティ全体を再起動することなくドロワー内で更新する必要があるようにしたいと考えています。Android 開発者向けドキュメントでは、notifyDataSetChanged() や、ビューを更新できる並べ替えなどのメソッドが強調表示されていません。

私のデータは、myProjectList と sharedProjectList の 2 つの arrayList で構成されています。リストは、アクティビティ全体で公開され、ユーザーが行った変更で非同期に更新されるプロジェクト オブジェクトで構成されます。

EDIT2:解決済み誰かがこの質問に同様の回答を投稿しているようです:

Googleの新しいNavigationViewでMenuItemをSubMenuに追加するには?

これを onResume に追加し、元のリストを更新すると完全に機能します。

final View child = navigationView.getChildAt(0);
                if (child != null && child instanceof ListView) {
                    final ListView menuView = (ListView) child;
                    final HeaderViewListAdapter adapter = (HeaderViewListAdapter) menuView.getAdapter();
                    final BaseAdapter wrapped = (BaseAdapter) adapter.getWrappedAdapter();
                    wrapped.notifyDataSetChanged();
                }
4

0 に答える 0