[英]Back navigation in title bar - fragment
像这样问了很多问题,但是我尝试过的一切似乎都不起作用。 本质上,我有一个主要活动,该活动根据用户单击的内容(默认为home片段)调用不同的片段。 我想在标题栏上有一个后退按钮,以返回上一个片段。
我的片段是从主要活动中调用的,如下所示:
Fragment fragment = null;
fragment = new nextFragment();
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frame_container, fragment).addToBackStack(null);
fragmentTransaction.commit();
fragmentTransaction.addToBackStack(null);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
但是由于不赞成使用ActionBarActivity活动,因此我需要扩展AppCompatActivity而不是FragmentActivity,以便可以使用actionbar(我假设这是我需要的)。 但是,然后我无法切换到我的片段。 因此,有人知道我如何在片段中实现后退按钮,或者在这种情况下如何使用AppCompatActivity。 谢谢你的帮助。
如果您扩展AppCompatActivity
请尝试以下操作:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Include these 2 lines ONLY if need to use Toolbar from layout xml as Action Bar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//Add back navigation in the title bar
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//
//Other works to be done in onCreate.....
//
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
//Title bar back press triggers onBackPressed()
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
//Both navigation bar back press and title bar back press will trigger this method
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0 ) {
getFragmentManager().popBackStack();
}
else {
super.onBackPressed();
}
}
}
您已保存通过调用使用的最后一个片段
addToBacktack(null).commit()
因此,下一步要调用它的方法是在托管该片段的活动中重写onBackPressed()
。
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0 ){
getFragmentManager().popBackStack();
}
else {
super.onBackPressed();
}
}
因此,每当您从片段中调用活动的onBackPressed()
,该片段都会返回到最后保存的片段。
要在标题栏中添加“后退按钮”,必须将以下代码添加到Fragment中。
Toolbar toolbar = (Toolbar)view.findViewById(R.id.app_bar);
AppCompatActivity AppCompatActivity = (AppCompatActivity)getActivity();
AppCompatActivity.setSupportActionBar(toolbar);
AppCompatActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
return view;
}
不要忘记将MainActivity扩展到AppCompatActivity。
然后,您必须在我的Fragment类中使用此Java代码,以使用户做出反应,点击操作栏中的后退/向上图标。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getActivity().onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.