android-fragments Android编程-导航抽屉相同片段的多个示例

6yoyoihd  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(137)

我正在尝试做一个天气应用程序,用户添加的每个位置,它都会显示在导航抽屉中。
我希望在导航抽屉中有多个项目,每个项目的不同位置,当一个位置被点击,一个片段将加载天气信息。我希望相同的片段,因为任何位置的布局将是相同的。
信息将通过基于所单击位置的API调用加载。
我的问题是,如果可能的话,我如何在导航抽屉中多次拥有相同的片段?
我考虑过在从DB加载时为每个位置创建一个新的片段,但这可能会因为位置太多而无法承受。
先谢谢你。

xsuvu9jc

xsuvu9jc1#

你可以使用同一个fragment,并在响应用户点击时为fragment对象分配不同的构造函数...

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            Log.e("NAVIGATION------", item.toString());
            switch(){
              if(item == R.id.nav_scenario_1){
                 SettingsFragment fragment = new 
                 SettingsFragment();
                 Bundle arguments = new Bundle();
                 arguments.putString( string_key , desired_string);
                 fragment.setArguments(arguments);
                 final FragmentTransaction ft = 
                 getFragmentManager().beginTransaction();
                 ft.replace(R.id.content, fragment , FRAGMENT_TAG);
                 ft.commit();
                }
                ....
                }
            return true;
        }
    });

或者从导航控制器中,你可以使用类似的东西来传递数据...

<fragment
    android:id="@+id/nav_terms"
    android:name="com.google.fragment.MainFragment"
    android:label="@string/menu_terms"
    tools:layout="@layout/fragment_main" >
    <argument
        android:name="UsedObjectString"
        app:argType="string"
    android:defaultValue="some_data_as_json"/>
    </fragment>

然后可以在片段中检索它,如下所示:

if(getArguments() != null) { 
    String stringObject = 
  MainFragmentArgs.fromBundle(getArguments()).UsedObjectString(); 
}

相关问题