有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法更新视图寻呼机中的中间片段。

我一直在做一个有3个选项卡的选项卡布局

我的问题是 我无法更新、刷新页面之间的第二个选项卡

根据我的调试 我从第一个标签滑动到第二个标签,第三个标签在getItem(int位置)被调用,类似地,片段一被称为从第三个标签滑动到第二个标签

viewpager的默认设置为1。我甚至无法将其设置为零计数

在getItem,最开始的位置是1,但我一刷页面, 它只调用位置0和2。 1永远不会被调用

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

这是我的ViewPagerSetUp

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new 
ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new InvitedFragment(), "Invited");
    adapter.addFragment(new InterestedFragment(), "Interested");
    adapter.addFragment(new AttendingFragment(), "Attending");
    viewPager.setAdapter(adapter);
}

这是我的寻呼机

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

    public void refreshFragment(int position) {
        mFragmentList.get(position).onResume();
    }

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

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

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

addOnPageChangeListener是一个选项,但我也无法使用pageChangelistener刷新它

我怎样才能治愈精神分裂症? 如何刷新每页滑动的每个选项卡

多谢各位


共 (4) 个答案

  1. # 1 楼答案

    将此添加到您的活动中

      viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    
            }
    
            @Override
            public void onPageSelected(int position) {
                viewPager.getAdapter().notifyDataSetChanged();
            }
    
            @Override
            public void onPageScrollStateChanged(int state) {
    
            }
        });
    

    在适配器中添加以下内容:

     @Override
        public int getItemPosition(Object object) {
           return POSITION_NONE;
        }
    
  2. # 2 楼答案

    您可以使用下面的方法刷新第二个片段。将此方法放入片段中

    @Override
        public void setUserVisibleHint(boolean visible) {
            super.setUserVisibleHint(visible);
            if (visible) {
                //   load data here
            }else {
                // fragment is no longer visible
            }
        }
    
  3. # 3 楼答案

    试试这个

    在片段中重写下面的方法。当片段可见时调用

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            //do your Stuffs
        }
    }
    
  4. # 4 楼答案

    您必须将视图寻呼机添加到TableLayout中,如果未添加,请尝试以下代码:

     tabLayout.setupWithViewPager(viewPager); 
    

    此外,您正在refreshFragment方法中调用父片段(超级)onResume方法,您必须调用子片段onResume方法:

        mInvitedFragment.onResume();
        mInterestedFragment.onResume();
        mAttendingFragment.onResume();