我在视图寻呼机活动中有3个制表符片段。我们将它命名为F1,F2,F3。
我想点击F2中的项目后更新F1。
这是我到目前为止所尝试的内容。在活动中:
public class UserShopActivity extends FragmentActivity implements
ActionBar.TabListener,
UserCategoriesFragment.OnUserCategoriesSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_user_profile);
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
mAdapter = new TabsUserShopAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
...
}
...
@Override
public void onUserCategoriesSelected(String category_id, Boolean flag) {
UserItemsFragment fragment = new UserItemsFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.pager, fragment)
.addToBackStack(null)
.commit();
}
...
}
在activity_user_profile.xml
:
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</android.support.v4.view.ViewPager>
我的标签页面适配器是一个基本的,TabUserShopAdapter
:
public class TabsUserShopAdapter extends FragmentStatePagerAdapter {
static final int NUM_ITEMS = 3;
public TabsUserShopAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
// F1
return new UserItemsFragment();
case 1:
// F2
return new UserCategoriesFragment();
case 2:
// F3
return new UserProfileFragment();
}
return null;
}
@Override
public int getCount() {
// get item count - equal to number of tabs
return NUM_ITEMS;
}
@Override
public int getItemPosition(Object object) {
//return super.getItemPosition(object);
return POSITION_NONE;
}
}
但是,在活动中调用F1的监听器不起作用。如何更换片段以从F2更新F1,同时保持标签可见?
我不确定活动中replace
的哪个ID。有人可以在这里指出错误。
更新:
我在活动中为视图页面添加了setCurrentItem。它确实有效,但它只将标签从F2更改为F1。没有捆绑包中提供的信息。
@Override
public void onUserCategoriesSelected(String category_id) {
UserItemsFragment fragment = new UserItemsFragment(viewPager);
Bundle args = new Bundle();
args.putString("category_id", category_id);
fragment.setArguments(args);
viewPager.setCurrentItem(0);
}
如何将此值传递给F1(UserItemsFragment)并在获取值时更新F1?覆盖F1生命周期中的任何方法都有效吗?
请记住,F1预装了数据。因此,在用户点击F2中的项目后,F1将刷新新数据。
答案 0 :(得分:1)
一个并不简单......替换寻呼机中的片段:)
getSupportFragmentManager().beginTransaction()
.replace(R.id.pager, fragment)
.addToBackStack(null)
.commit();
这将替换您手动添加的片段(通过使用片段管理器的代码)
您的片段由寻呼机添加。 您可以通过在片段上调用.getItem(int position)来轻松访问它们。