我正在开发一个简单的Android应用程序。我有一个带有两个按钮的片段:prev和home。如果我触摸它可以正常工作(返回主菜单)但是如果我想回到之前的活动,我必须触摸两次prev按钮。我不知道发生了什么。我搜索但没有。有人有同样的问题吗?
感谢您的帮助。
这是我的代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.navigation_activity_fragment, container, false);
TextView textView = (TextView) view.findViewById(R.id.activityTitle);
Button home = (Button) view.findViewById(R.id.home);
Button prev = (Button) view.findViewById(R.id.button2);
home.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Intent i = new Intent(getActivity(), MainMenuActivity.class);
startActivity(i);
}
});
prev.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
getActivity().finish();
}
});
return view;
}
和xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#00000000"
android:orientation="vertical">
<ImageView
android:id="@+id/screen_header"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/screen_header"
android:contentDescription="@null"/>
<TextView
android:id="@+id/activityTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/screen_header"
android:layout_centerHorizontal="true"
android:layout_marginBottom="14dp"
android:text="Large Text"
android:textAppearance="?android:textAppearanceLarge"
android:textColor="@color/black"
android:textSize="16.5dip"
android:textStyle="bold" />
<Button
android:id="@+id/home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/activityTitle"
android:layout_alignBottom="@+id/activityTitle"
android:layout_alignParentRight="true"
android:background="@drawable/home_btn"
android:onClick="onClick"/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/activityTitle"
android:layout_alignParentLeft="true"
android:background="@drawable/prev_btn"
android:onClick="onClick"/>
</RelativeLayout>
答案 0 :(得分:0)
这是一般的做法 -
只要您需要在UI中显示片段,就必须在事务中添加片段。
例如 -
从Fragment A
开始,转到Fragment B
,replace A with B
并在addToBackstack()之前使用commit()。
现在从片段B,只需使用popBackStack()
,这将带回A.
prev.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
getActivity().getSupportFragmentManager().popBackStack();
}
});
对于您的代码特别不确定,但这不是回到上一个片段的正确方法。执行getActivity().finish()
时,您将完成当前活动,而不是返回上一个片段。请注意,当您的每个活动都有一个片段时,您尝试的内容似乎是正确的,但如果您的活动包含许多片段并且您对其执行了完成,那么它会将您切换回上一个活动。
因此,为了启用片段导航,您必须将它们添加到backstack。
然后返回上一个片段,只需使用popBackStack。