【问题标题】:asyncTask from 3rd tab called in first tab in View pager fragment在查看寻呼机片段的第一个选项卡中调用来自第三个选项卡的 asyncTask
【发布时间】:2017-01-26 09:06:31
【问题描述】:

我在标签视图中使用了视图寻呼机,我的活动中有 3 个标签。每个选项卡都有一个片段。我在所有选项卡的 OnCreateView 中调用了 asyncTask。一切正常。但是问题来了,当我从所有其他选项卡进入第一个选项卡 asynctask 时,第二个选项卡或第三个选项卡也会在第一个选项卡中调用。这是我的代码 sn-p。

标签活动:

  class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFrag(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    } 

第一个标签:

  @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            View view=inflater.inflate(R.layout.fragment_current, container, false);



 RequestNetworkcall();
return view;}

我在过去 2 天的租约中遇到了这个问题,请帮帮我。

【问题讨论】:

    标签: android android-asynctask android-viewpager fragment android-tablayout


    【解决方案1】:

    Viewpager 总是初始化它的三个页面,就像它是可见的一样。 这意味着你所有的页面都已经调用了他们的 onResume() 方法。

    您需要在选择该页面时调用您的 asynctask。

    更新:

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    
            }
    
            @Override
            public void onPageSelected(int position) {
                if (position == 3) {
                    //Call your asynctask here
                }
    
            }
    
            @Override
            public void onPageScrollStateChanged(int state) {
    
            }
        });
    

    【讨论】:

    • 我如何知道选择了哪个页面?
    • 我尝试过并从选项卡活动中调用我的 asynctask 方法。但是当我在 sqlite 中保存响应时,它会在 onPost() 中引发 NPE。
    猜你喜欢
    • 2018-04-13
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多