当前位置: 首页 > 知识库问答 >
问题:

只有在选定时才在ViewPager中加载片段

段铭晨
2023-03-14

我怎么能那么做?我也不知道。我在等你的帮助。谢谢。

我的代码:

public class Fragments extends AppCompatActivity {

    private TabLayout tabLayout;
    private ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_tabs);

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new FirstFragment(), "1");
        adapter.addFragment(new SecondFragment(), "2");
        adapter.addFragment(new ThirdFragment(), "3");
        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);
        }

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

共有1个答案

郑茂材
2023-03-14

如果没有人给你一个好的答案,我知道这是5年后,但任何人读这。我实际上有相反的问题。我需要同时加载所有选项卡。现在发生在我身上的是一次只加载一个标签。我需要将此适配器用于带tablayout的viewpager2,这样我就可以禁用viewpager从左向右滑动以满足我的特定用途。

下面是我的代码:

警告代码使用KOTLIN而不是JAVA

class RecipeTabAdapter internal constructor(fm: FragmentManager, lifecycle: Lifecycle) : FragmentStateAdapter(fm, lifecycle) {

val fragmentsList: ArrayList<Fragment> = arrayListOf()

fun addFragment(fragment: Fragment) {
    fragmentsList.add(fragment)
}

override fun getItemCount(): Int {
    return fragmentsList.size
}

override fun createFragment(position: Int): Fragment {
    when (position) {
        position -> fragmentsList[position]
        position -> fragmentsList[position]
    }
    return fragmentsList[position]
}
 类似资料:
  • 我使用了和。 但它一次加载两个页面。 有什么方法可以在viewpager中只加载一个页面吗?

  • 问题内容: 我在内使用3 ,问题是我在和加载器中加载大数据。在这类设备上,它可以正常工作,但是在低端设备上,则需要很多时间。这主要是因为当我实现时,我将Fragments放在an中,这迫使片段在加载主活动时实例化。我需要的是它只是“加载”第一个片段(主要),而当用户使用时,加载另一个片段。它有什么办法做到这一点?这是我的页面 问题答案: Sun的上述方法对我不起作用(也许对您有用),但是我想我也将

  • 我有一个视页,有3个标签在里面。所有三个选项卡都有它们的片段。我注意到,当我将adapter设置为ViewPager时,每个片段数据都是在第一次加载的。 我需要的是只有当特定的标签被点击时才加载相应标签的片段数据。

  • 我已经在我的片段中重写了以下方法:setUserVisibleHint 在fragment类中,变量设置为:private var isLoadOnce=false。 我有3个片段,问题是当我的活动popsup时,第一个片段是可见的,如果我单击最后一个选项卡,也就是第三个选项卡加载第三个片段,什么也不会发生,即web服务根本不会调用。

  • 在我的应用程序中,我有一个ViewPager,里面有很多可滑动的标签,里面有碎片。我使用方法检测何时出现在屏幕上。当用户在选项卡之间滑动时,这非常有效,但它在第一次加载时不起作用。要运行该方法中的代码,我必须向左滑动,然后返回到第一个,因为方法是在方法之前调用的。 你有任何想法,我如何运行这段代码后,第一个片段是可见的吗?中有方法吗?

  • 这是我的适配器类。 当添加片段并将它们添加到适配器中的不同arraylist时,我传递了不同的arraylist,当调用get item时,我从arraylist中获取条目并将其作为参数传递给该片段,但当我运行此操作时,我最初只获得所有参数,当我更改选项卡时不会发生任何事情。我试着调试,发现getitem最初只被调用了8次,当我改变viewpager选项卡时,什么也不会发生。我也尝试了fragme