Android FragmentActivity 不显示操作栏
Android FragmentActivity not showing the action bar
我正在尝试创建一个使用片段的应用程序,但是当我尝试在 FragmentActivity
中显示 Fragment
时,操作栏没有出现。
片段活动class:
public class NoteDetailsActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.note_details_fragment);
if (getResources().getConfiguration().orientation
== Configuration.ORIENTATION_LANDSCAPE) {
// If the screen is now in landscape mode, we can show the
// dialog in-line with the list so we don't need this activity.
finish();
return;
}
if (savedInstanceState == null) {
// During initial setup, plug in the details fragment.
NoteDetailsFragment details = new NoteDetailsFragment();
details.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().add(R.id.note_details, details).commit();
}
}
}
片段class:
public class NoteDetailsFragment extends Fragment {
/**
* Create a new instance of DetailsFragment, initialized to
* show the text at 'index'.
*/
public static NoteDetailsFragment newInstance(int index) {
NoteDetailsFragment f = new NoteDetailsFragment();
// Supply index input as an argument.
Bundle args = new Bundle();
args.putInt("index", index);
f.setArguments(args);
return f;
}
public int getShownIndex() {
return getArguments().getInt("index", 0);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (container == null) {
// We have different layouts, and in one of them this
// fragment's containing frame doesn't exist. The fragment
// may still be created from its saved state, but there is
// no reason to try to create its view hierarchy because it
// won't be displayed. Note this is not needed -- we could
// just run the code below, where we would create and return
// the view hierarchy; it would just never be used.
return null;
}
int index = getArguments().getInt("index");
String message = "";
switch (index) {
case 0:
message = "Start";
break;
case 1:
message = "Second";
break;
case 2:
message = "last";
break;
}
TextView text = new TextView(getActivity());
text.setText(message);
return text;
}
}
我尝试在我的 FragmentActivity
class 中实现 onCreateOptionsMenu
但没有任何反应。我也尝试在片段 class 中 setHasOptionsMenu(true)
,但这也没有任何作用。
如果感兴趣,这是我插入 Fragment
(note_details_fragment):
的布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_margin="@dimen/activity_vertical_margin"
android:layout_height="match_parent">
<FrameLayout
android:layout_above="@id/save_note"
android:id="@+id/note_details"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:background="?android:attr/detailsElementBackground" />
<Button
android:id="@+id/save_note"
android:layout_alignParentBottom="true"
android:text="@string/save"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
编辑:
来自清单:
<activity android:name=".activities.NoteDetailsActivity">
</activity>
派生自 class ActionBarActivity
而不是 FragmentAcivity
应该可以解决您的问题:
public class NoteDetailsActivity extends ActionBarActivity {
// ...
}
我正在尝试创建一个使用片段的应用程序,但是当我尝试在 FragmentActivity
中显示 Fragment
时,操作栏没有出现。
片段活动class:
public class NoteDetailsActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.note_details_fragment);
if (getResources().getConfiguration().orientation
== Configuration.ORIENTATION_LANDSCAPE) {
// If the screen is now in landscape mode, we can show the
// dialog in-line with the list so we don't need this activity.
finish();
return;
}
if (savedInstanceState == null) {
// During initial setup, plug in the details fragment.
NoteDetailsFragment details = new NoteDetailsFragment();
details.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().add(R.id.note_details, details).commit();
}
}
}
片段class:
public class NoteDetailsFragment extends Fragment {
/**
* Create a new instance of DetailsFragment, initialized to
* show the text at 'index'.
*/
public static NoteDetailsFragment newInstance(int index) {
NoteDetailsFragment f = new NoteDetailsFragment();
// Supply index input as an argument.
Bundle args = new Bundle();
args.putInt("index", index);
f.setArguments(args);
return f;
}
public int getShownIndex() {
return getArguments().getInt("index", 0);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (container == null) {
// We have different layouts, and in one of them this
// fragment's containing frame doesn't exist. The fragment
// may still be created from its saved state, but there is
// no reason to try to create its view hierarchy because it
// won't be displayed. Note this is not needed -- we could
// just run the code below, where we would create and return
// the view hierarchy; it would just never be used.
return null;
}
int index = getArguments().getInt("index");
String message = "";
switch (index) {
case 0:
message = "Start";
break;
case 1:
message = "Second";
break;
case 2:
message = "last";
break;
}
TextView text = new TextView(getActivity());
text.setText(message);
return text;
}
}
我尝试在我的 FragmentActivity
class 中实现 onCreateOptionsMenu
但没有任何反应。我也尝试在片段 class 中 setHasOptionsMenu(true)
,但这也没有任何作用。
如果感兴趣,这是我插入 Fragment
(note_details_fragment):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_margin="@dimen/activity_vertical_margin"
android:layout_height="match_parent">
<FrameLayout
android:layout_above="@id/save_note"
android:id="@+id/note_details"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:background="?android:attr/detailsElementBackground" />
<Button
android:id="@+id/save_note"
android:layout_alignParentBottom="true"
android:text="@string/save"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
编辑: 来自清单:
<activity android:name=".activities.NoteDetailsActivity">
</activity>
派生自 class ActionBarActivity
而不是 FragmentAcivity
应该可以解决您的问题:
public class NoteDetailsActivity extends ActionBarActivity {
// ...
}