从ActionBar的dropDown调用其他Fragment

时间:2014-09-26 13:24:49

标签: android android-fragments drop-down-menu navigation android-actionbar

在我的应用程序中,我在ActionBar中添加了DropDown Spinner,现在无法辨认 - 如何更改所选下拉列表的底部。在我的activity_main.xml布局(Home)中,仅包含显示列表的片段。我正在寻找的是,创建其他UI屏幕也作为片段并在所选的每个dropDown上更改放置的片段。我的意思是主页有fragment_main.xml,选择dropDown设置然后显示setting_fragment.xml等等。我的主要是:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
tools:ignore="MergeRootFrame" >

<fragment
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="terryconsulting.servicestation.AppointListFragment"
    android:id="@+id/main_fragment"
    />
</FrameLayout>

在MainActivity类中,我实现了ActionBar.OnNavigationListener,它调用了之前在屏幕上显示Hello World文本的PlaceholderFragment。

@Override
public boolean onNavigationItemSelected(int position, long id) {
    // When the given dropdown item is selected, show its contents in the
    // container view.
    //getFragmentManager().beginTransaction()
    //        .replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
    //        .commit();
    return true;
    // http://www.vogella.com/tutorials/AndroidActionBar/article.html --- ACTIONBAR ACTION
}

// As AppointListFragment is added in this activity, so need to implement this listener here
@Override
public void onFragmentInteraction(Uri uri) {
    System.out.println("Into onFragmentInteraction. URL - " + uri);

    return;
}

我在哪里: - 从下拉菜单中选择设置时,我无法知道如何拨打/设置SettingFragment。从设置何时按下Home图标返回到主页AppointListFragment就可以了?

我在想什么?问,是否可能&amp;实际的 ?我认为应该是这样,因为使用自己的ActionBar调用设置为活动不是最佳解决方案。

请指导我这个,我已经搜索了很多教程但是找不到这种情况或使用NavigationSelection&amp; amp;片段在任何地方。

1 个答案:

答案 0 :(得分:1)

XML布局中的

片段是静态的。我很漂亮它可能以某种方式使它们工作,但对于动态生成/创建/删除,你想用Java做所有事情。

说,首先从XML中删除<fragment,然后从创建活动中删除:

@覆盖    protected void onCreate(Bundle savedInstanceState){        super.onCreate(savedInstanceState);        setContentView(...你的xml布局......);

   // fragments are auto-re-created on rotation,
   // so only create/put in layout one if not rotating
   if(savedInstanceState == null){

       // I'm assuming here your first fragment is position 0
       gotoFragment(0);
   }

}

然后在每个选择上只调用新的:

@Override
public boolean onNavigationItemSelected(int position, long id) {
    gotoFragment(position);
    return true;
}

这是更改屏幕上片段的一般方法。

private void gotoFragment(int position){
       Fragment f = getFragmentManager().findFragmentByTag("position_" + position);
       if(f == null){
           switch(position){
               case values:
                  f = // create here new object of your fragment for each position
           }
       }

        getFragmentManager().beginTransaction()
                .replace(R.id.container, f, "position_" + position)
                .commit();
}