简体   繁体   English

无法替换标签页中的片段

[英]Cannot replace fragment in tabs viewpager

I have 3 tab fragments in a view pager activity. 我在查看寻呼机活动中有3个选项卡片段。 Let's name it F1, F2, F3. 我们将其命名为F1,F2,F3。

I want to update F1 after clicking an item from F2. 单击F2中的某个项目后,我想更新F1。

Here is what I have tried so far. 到目前为止,这是我尝试过的。 In the activity: 在活动中:

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();
    }
...

}

In activity_user_profile.xml : 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>

My tabs Pager Adapter is a basic one, TabUserShopAdapter : 我的选项卡Pager Adapter是一个基本的选项卡, 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;
    }
}

However the listener to invoke F1 in the activity doesn't work. 但是,在活动中调用F1的侦听器不起作用。 How do I replace the fragment to update F1 from F2, while leaving the tabs visible? 我如何替换片段以从F2更新F1,同时保持选项卡可见?

I'm not sure which ID to replace in the activity. 我不确定要在活动中replace哪个ID。 Can someone point out the mistake here. 有人可以在这里指出错误。


UPDATE : 更新

I've added setCurrentItem for view page in the activity. 我在活动中为视图页面添加了setCurrentItem。 It does work, but it only changes the tab from F2 to F1. 它可以工作,但是只能将选项卡从F2更改为F1。 Not with the info provided in the bundle. 捆绑包中没有提供的信息。

@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);
}

How do I pass this value to F1 (UserItemsFragment) and update F1 while obtaining the value? 如何将此值传递给F1(UserItemsFragment),并在获取值的同时更新F1? Does overriding any methods in F1 lifecycle works? 在F1生命周期中覆盖任何方法是否可行?

Keep in mind that F1 is preloaded with data. 请记住,F1已预加载数据。 So, after user clicked an item in F2, F1 will get refreshed with new data. 因此,在用户单击F2中的项目后,F1将使用新数据刷新。

One does not simply... replace a fragment in a pager :) 一个不只是...替换寻呼机中的一个片段:)

getSupportFragmentManager().beginTransaction()
            .replace(R.id.pager, fragment)
            .addToBackStack(null)
            .commit();

This would replace a fragment that you would have manually added (by code using the fragment manager) 这将替换您手动添加的片段(使用片段管理器通过代码)

Your fragments were added by the pager. 您的片段是由寻呼机添加的。 You could easily access them by calling .getItem(int position) on the fragment. 您可以通过在片段上调用.getItem(int position)来轻松访问它们。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM