首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新加载活动以在碎片之间重新切换

重新加载活动以在碎片之间重新切换
EN

Stack Overflow用户
提问于 2016-08-15 11:49:08
回答 1查看 290关注 0票数 1

我有一个包含三个片段的TabLayout,在第一个选项卡上,我想根据条件在两个片段之间切换,我使用了if语句,但是片段仍然没有切换,它只保留了最初的片段。下面是案例场景和正在执行的代码片段。

我的应用程序允许用户决定是否在第一次使用时登录,我的主要活动是启动程序,主活动的适配器(包含TabLayout和三个Fragment)检查用户是否登录。C.=

代码语言:javascript
复制
if (user != login) {
  load fragment A
}else{
  load fragment B
}

我有一个选项,用户在使用应用程序时可以登录,如果用户单击登录按钮,它会加载一个片段供用户登录,一旦用户登录,该片段仍然保留用户未登录的状态,即它仍在加载片段A,但随后我可以在应用程序中看到所有用户登录详细信息。商业、商业、金融、金融等领域的商品、金融等领域的商品、商品、商业、金融等领域的商业、商业、金融、金融等领域。

这一点仍然是积极的

代码语言:javascript
复制
if (user != login) {
   load fragment A
} 

代码片段

代码语言:javascript
复制
@Override
public Fragment getItem(int position) {
    Fragment f;
    switch (position) {
        case NEWS_POST:
            if(fbid != null){
                f = new NewsFragment();
            }else{
                f = new NewsAllFragment();
            }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-15 12:12:46

首先,您应该使用SharedPreferences来检查用户是否登录。

此外,您可以在片段中使用这段代码来检查该片段是否可见。如果可见,您可以执行所需的任务,从共享首选项获取布尔型登录信息。

代码语言:javascript
复制
private static boolean m_iAmVisible;

@Override
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser);
    m_iAmVisible = isVisibleToUser;

    if (m_iAmVisible) { 
        Log.d(localTAG, "this fragment is now visible");
    } else {  
        Log.d(localTAG, "this fragment is now invisible");
    }
}

在这里,我看到了一个片段,在onCreateView方法中,我在其中使用了onCreateView

代码语言:javascript
复制
final View x = inflater.inflate(R.layout.consumer_tab_layout, null);
        tabLayout = (TabLayout) x.findViewById(R.id.tabs);
        viewpager_for_tabs = (ViewPager) x.findViewById(R.id.viewpager_for_tabs);


        bottom_tv1 = (TextView) x.findViewById(R.id.bottom_tv1);
        bottom_tv2 = (TextView) x.findViewById(R.id.bottom_tv2);
        bottom_tv3 = (TextView) x.findViewById(R.id.bottom_tv3);
        bottom_tv4 = (TextView) x.findViewById(R.id.bottom_tv4);
        bottom_tv5 = (TextView) x.findViewById(R.id.bottom_tv5);

        /**
         *Set an Apater for the View Pager
         */
        viewpager_for_tabs.setAdapter(new MyAdapter(getChildFragmentManager()));
        viewpager_for_tabs.setOffscreenPageLimit(5);

        /**
         * Now , this is a workaround ,
         * The setupWithViewPager dose't works without the runnable .
         * Maybe a Support Library Bug .
         */

        viewpager_for_tabs.setOnPageChangeListener(myOnPageChangeListener);
        bottom_tv1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                updateBottomTabTextViews(bottom_tv1, R.drawable.d1);
                viewpager_for_tabs.setCurrentItem(0, false);
            }
        });
        bottom_tv2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                updateBottomTabTextViews(bottom_tv2, R.drawable.d2);
                viewpager_for_tabs.setCurrentItem(1, false);
            }
        });
        bottom_tv3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                updateBottomTabTextViews(bottom_tv3, R.drawable.d3);
                viewpager_for_tabs.setCurrentItem(2, false);
            }
        });
        bottom_tv4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                updateBottomTabTextViews(bottom_tv4, R.drawable.d4);
                viewpager_for_tabs.setCurrentItem(3, false);
            }
        });
        bottom_tv5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                updateBottomTabTextViews(bottom_tv5, R.drawable.d5);
                viewpager_for_tabs.setCurrentItem(4, false);
            }
        });

        tabLayout.post(new Runnable() {
            @Override
            public void run() {
                tabLayout.setupWithViewPager(viewpager_for_tabs);


            }
        });

        return x;

和适配器getitem方法中的

代码语言:javascript
复制
@Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                        return new fragment();

                case 1:
                    return frag2.getInstance();
                case 2:
                   return frag3.getInstance();
                case 3:
                   return frag4.getInstance();
                case 4:
                    return frag5.getInstance();
            }
            return null;
        }

在这种情况下,我只需使用performClick()方法为视图实用地调用Button performClick,它将自动替换我的片段。

更好的解决方案是更改viewPager的当前项--看看这个解决方案pager.setCurrentItem( num )

如果希望在viewPager的单个选项卡上显示不同的片段,那么在片段适配器的getItems()方法中应用布尔条件。然后调用viewPager.setCurrentItem(int)函数。

确保您的片段适配器扩展了FragmentStatePagerAdapter

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38954511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档