假设我有一个源自MainActivity A的ListFragment A.用户从列表A中按下列表并转到FragmentActivity B. FragmentActivity包含3个片段标签。
所以,我想向FragmentActivity B添加导航,以便它返回到ListFragment A.我该怎么做呢?
这是我的尝试,到目前为止没有运气:
public class ItemDetailActivity extends FragmentActivity implements ActionBar.TabListener {
...
actionBar.setDisplayHomeAsUpEnabled(true);
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
LatestFragment fragment = new LatestFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.pager, fragment).addToBackStack(null)
.commit();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
LatestFragment
是ListFragment A我想回去。
但是,我收到一条错误消息,说我必须实现OnLatestSelectedListener
,因为在LatestFragment中,我已经设置了一个接口来传递值。
我还可以在onOptionsItemSelected
内找到什么?
答案 0 :(得分:2)
假设您使用标准意图启动了ItemDetailActivity,您应该能够使用这样的后退操作:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
super.onBackPressed();
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
答案 1 :(得分:1)
如果片段A在您的主要活动中,那么您还可以查看使用ActionBar。后退按钮将带您进入主要活动。它也很容易实现。
答案 2 :(得分:1)
我假设你的FragmentActivityB有后退按钮。 如果没有,你可以通过
获得它getActionBar().setDisplayHomeAsUpEnabled(true);
<meta-data android:name="android.support.PARENT_ACTIVITY"
android:value="#######" />
现在,你可以使用ViewNumber(1,2,3)等标志来识别以MainActivity为根的片段。
实施方法 onMenuItemSelected(....)并传递 viewNumber ie;你要展示的片段。
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
//We are implementing this method to respond to the back button on the action bar.
int itemId = item.getItemId();
switch (itemId) {
case android.R.id.home:
Intent i = new Intent(this,MainActivity.class);
i.putExtra("viewNumber",2);
startActivity(i);
break;
}
return true;
}//onMenuItemSelected
在 MainActivity 中使用 Bundles 获取 viewNumber ,您可以使用这样的方法来计算并显示所需的片段。< / p>
private void displayView(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 1:
fragment = new ListFragmentB();
break;
case 2:
fragment = new ListFragmentA();
break;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
}
}
}
我希望它能解决你的问题。