gpt4 book ai didi

android - TabLayout 中的 fragment 仅在用户滑动 Android 时加载

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:54:00 25 4
gpt4 key购买 nike

您好,我正在使用 tablayoutviewpager 制作一个包含 fragment 和几个子 fragment 的应用>。问题是我所有的子 fragment(来自 Tablayout)总是执行(每当用户单击父 fragment 时加载所有代码。如何获取子 fragment 仅在用户滑动到它时加载(例如,我有 2 个选项卡,选项卡 2 中的内容仅在用户滑动到选项卡 2 时加载)

这是我的父 fragment 代码

public class ManageEventFragment extends Fragment {


public ManageEventFragment() {
// Required empty public constructor
}


TabLayout tabLayout;
ViewPager viewPager;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View viewFragment = inflater.inflate(R.layout.fragment_manage_event, container, false);

viewPager = (ViewPager) viewFragment.findViewById(R.id.viewPager);

tabLayout = (TabLayout) viewFragment.findViewById(R.id.tabLayout);

viewPager.setAdapter(new CustomAdapter(getChildFragmentManager(), getContext()));
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

return viewFragment;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {

// tabLayout.setupWithViewPager(viewPager);
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});

tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabReselected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
});

if (ViewCompat.isLaidOut(tabLayout)) {
tabLayout.setupWithViewPager(viewPager);
} else {
tabLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
tabLayout.setupWithViewPager(viewPager);
tabLayout.removeOnLayoutChangeListener(this);
}
});
}

super.onActivityCreated(savedInstanceState);

}


//TabLayout and ViewPager class
private class CustomAdapter extends FragmentPagerAdapter {

private String fragments[] = {"Edit Event", "Create Event"};

public CustomAdapter(FragmentManager fragmentManager, Context context) {
super(fragmentManager);
}

@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new EditEventFragment();
case 1:
return new CreateEventFragment();
default:
return null;
}
}

@Override
public int getCount() {
return fragments.length;
}

@Override
public CharSequence getPageTitle(int position) {
return fragments[position];
}

}

}

还有我的 child fragment 代码。我希望这些代码仅在用户滑动到子选项卡时执行。非常感谢任何帮助,谢谢

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);

//Initializing our listEvents list
listEvents = new ArrayList();

recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);

adapter = new EventAdapterEdit(getContext(),listEvents);
recyclerView.setAdapter(adapter);


requestQueue = Volley.newRequestQueue(getContext());

adapter = new EventAdapterEdit(getContext(),listEvents);
recyclerView.setAdapter(adapter);

getEventDetailRespond(requestQueue);

最佳答案

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

您可以在您的 ViewPager Adapter

fragment 中使用上述方法
if(isVisibleToUser){//dosomething when the fragment is visible}
else{//dosomething else.}

请注意不要在那里初始化 View 或其他任何东西,而是在 onViewCreated 中初始化您的 View 并调用您想要在 setUserVisibleHint 上执行的方法。另一种丑陋的方法是向您的 ViewPager 添加滚动监听器并获取当前项目位置并触发 fragment 内的操作。要从 ViewPager Adapter 获取 fragment ,您可以这样做:

 MyFragment frag = (MyFragment) pager.getAdapter().instantiateItem(pager, position);

然后你可以调用 MyFragment 中的方法

关于android - TabLayout 中的 fragment 仅在用户滑动 Android 时加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34486841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com