Android ViewPager刷新片段
在我的应用程序中有2个选项卡(Android设计支持库),这是带有ViewPagerAdapter的片段:Android ViewPager刷新片段,android,android-fragments,tabs,android-viewpager,viewpagerindicator,Android,Android Fragments,Tabs,Android Viewpager,Viewpagerindicator,在我的应用程序中有2个选项卡(Android设计支持库),这是带有ViewPagerAdapter的片段: public class ListaCanali extends Fragment { public static TabLayout tabLayout; public static ViewPager viewPager; public static int int_items = 2 ; @Override public View onCreateView(LayoutInfla
public class ListaCanali extends Fragment {
public static TabLayout tabLayout;
public static ViewPager viewPager;
public static int int_items = 2 ;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v =inflater.inflate(R.layout.lista_canali, container,false);
//Titolo Fragment
((MainActivity) getActivity()).setActionBarTitle("Lista Canali");
//FindViewById
tabLayout = (TabLayout) v.findViewById(R.id.tabs);
viewPager = (ViewPager) v.findViewById(R.id.viewpager);
//Funzioni Tab
viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});
return v;
}
//Adattatore Tab
class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position)
{
switch (position){
case 0 : return new FragmentCanali();
case 1 : return new FragmentPreferiti();
}
return null;
}
public int getCount() {
return int_items;
}
public CharSequence getPageTitle(int position) {
switch (position){
case 0 :
return "Tutti";
case 1 :
return "Preferiti";
}
return null;
}
我希望我的应用程序在滑动时刷新片段,然后单击选项卡标题,因为这不会发生,我希望你们能帮助我。试试这个
要刷新片段,首先需要它的实例
改变这个
viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
到
到
我相信这不是唯一/最好的方法。但这应该像对我一样解决问题 请用这两种语言编写refresh()方法 碎片运河和碎片优先碎片
public class ListCanali extends Fragment implements OnPageChangeListener{
private MyAdapter mAdapter;
@Override
public View OnCreateView (...) {
...
if(mAdapter == null) {
mAdapter = new MyAdapter(getChildFragmentManager());
}
viewPager.setAdapter(mAdapter);
viewPager.setOnPageChangeListener(this);
...
}
...
@Override
public void OnPageSelected (int position) {
switch (position){
case 0 : ((FragmentCanali)adapter.getItem(position)).refresh();
case 1 : ((FragmentPreferiti)adapter.getItem(position)).refresh();
}
}}
如果您从一个具有abstract refresh()方法的基片段扩展这两个片段,则会更干净
在onPageSelected()中,您只需调用
((BaseFragment)adapter.getItem(position)).refresh()
您好,谢谢,但显示错误。。。屏幕:好的,我解决了,但我有一个新错误:在适配器ArrayList fr_列表中添加此行;我已经添加了查看屏幕的行。什么是fr_列表?您能编辑我的片段并将其放入示例中吗?更改((FragmentCanali)fr_list.get(0)).refresh()
到((FragmentCanali)mMyAdapter.fr_list.get(0)).refresh()
,其中mMyAdapter
是适配器的成员变量。您可以查看getChildFragmentManager()
。我在项目中用它替换了getFragmentManager()
。
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position)
{
switch (position){
case 0 : return new FragmentCanali();
case 1 : return new FragmentPreferiti();
}
return null;
}
public int getCount() {
return int_items;
}
public MyAdapter(FragmentManager fm,ArrayList<Fragment> fr_list) {
super(fm);
this.fr_list=fr_list;
}
@Override
public Fragment getItem(int position)
{
return fr_list.get(position);
}
public int getCount() {
return fr_list.size();
}
((FragmentCanali) mMyAdapter.fr_list.get(0)).refresh();
public class ListCanali extends Fragment implements OnPageChangeListener{
private MyAdapter mAdapter;
@Override
public View OnCreateView (...) {
...
if(mAdapter == null) {
mAdapter = new MyAdapter(getChildFragmentManager());
}
viewPager.setAdapter(mAdapter);
viewPager.setOnPageChangeListener(this);
...
}
...
@Override
public void OnPageSelected (int position) {
switch (position){
case 0 : ((FragmentCanali)adapter.getItem(position)).refresh();
case 1 : ((FragmentPreferiti)adapter.getItem(position)).refresh();
}
}}