0

我一直在寻找几个小时,但我无法完成这项工作:

我有 2 个片段,我在操作栏中的每个片段中添加了一个不同的菜单项。 在此处输入图像描述

如您所见,它正在工作,但我想要的是一个项目留在他的片段“框架”中(但仍在操作栏中)这些项目应该分开并保持在它们自己的片段之上,如下图所示。

在此处输入图像描述

我读过我需要在每个片段的 onCreate() 方法中调用 setHasOptionsMenu ,但它仍然无法按我的意愿工作。

这是我的代码:

MainActivity(托管我的 2 个片段)

public class MainActivity extends SherlockFragmentActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Frag1 f1 = new Frag1();
    Frag2 f2 = new Frag2();

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.frag1, f1);
    ft.replace(R.id.frag2, f2);
    ft.commit();

   }

}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

     <LinearLayout
      android:id="@+id/frag1"
      android:layout_height="match_parent"
      android:layout_width="match_parent"
      android:layout_weight="1"
      >
     </LinearLayout>

     <LinearLayout
      android:id="@+id/frag2"
      android:layout_height="match_parent"
      android:layout_width="match_parent"
      android:layout_weight="1"
      >
     </LinearLayout>

</LinearLayout>

Frag1.java

public class Frag1 extends SherlockFragment{


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.frag_content, container, false);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    super.onCreateOptionsMenu(menu, inflater);
    menu.add(0, 12, 1, "Frag 1").setTitle("MENU ITEM 1").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);


   }

}

Frag2.java

public class Frag2 extends SherlockFragment{


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.frag_content2, container, false);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    super.onCreateOptionsMenu(menu, inflater);
    menu.add(5, 15, 101, "Frag 2").setTitle("MENU ITEM 2").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);


   }

}

片段的布局是包含 TextView 的简单 LinearLayout

有人可以指点我正确的解决方案吗?

4

1 回答 1

1

这些项目应该分开并留在它们自己的片段之上,如下图所示。

这是不受支持的,并且违反了操作栏的 Android 设计指南。此外,请观看Android Design in Action 视频,其中 Google 工程师特别指出了此类操作栏问题(大约在 14:10 左右)。

于 2013-10-08T15:17:59.567 回答