的Android ViewPager刷新片段

问题描述:

在我的应用程序有2个选项卡(Android设计支持库),这与ViewPagerAdapter的片段:的Android ViewPager刷新片段

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

我想我的刷卡应用程序刷新片段和点击选项卡标题,因为这不要不会发生,我希望你能帮助我。

+0

你可以检查[这个例子](https://开头github上。COM/CabezasGonzalezJavier/RefreshCurrentFragmentWithinViewPager) – Cabezas

我敢肯定这是不是这样做的唯一/最好的方法。但是,这应该解决问题,因为它对我做了。

请在 FragmentCanali和FragmentPreferiti Fragments中写入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(); 
     } 
    }} 

如果从具有抽象refresh()方法的基本片段扩展两个片段,它将会更干净。

在使用onPageSelected(),你只需拨打((BaseFragment)adapter.getItem(position)).refresh()

尝试......

刷新片段,你需要它的实例第一。

改变这种

viewPager.setAdapter(new MyAdapter(getChildFragmentManager())); 

ArrayList<Fragment> fr_list = new ArrayList<Fragment>(); 
fr_list.add(new FragmentCanali()); 
fr_list.add(new FragmentPreferiti()); 
MyAdapter mMyAdapter = new MyAdapter(getChildFragmentManager(),fr_list); 
viewPager.setAdapter(mMyAdapter); 

在适配器改变这种

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(); 
+0

你好,谢谢你,但给我的错误...屏幕:[点击这里](http://cineblog01.be/cattura.png) –

+0

错误MyAdapter()???? – uday

+0

好吧,我解决了,但我有新的错误:[点击这里](http://www.cineblog01.be/screen.png) –

接受的答案是不是好办法,这就是为什么添加的解决方案。经过长时间的奋斗 找到工作解决方案。

只是通知到您的适配器,它的工作惊人,

Reference code

void setAdapter(int position) { 
     PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager()); 
     viewPager.setAdapter(pagerAdapter); 
     // when notify then set manually current position. 
     viewPager.setCurrentItem(position); 
     pagerAdapter.notifyDataSetChanged(); 
    } 

call this code when you set adapter and when you want to refresh UI.

在你的片段添加以下代码刷新UI

((YourActivityName) getContext()).setAdapter(selectedTabPosition); 

使用instanceof进行投射。

此代码共享不仅能帮助目的谁找到工作的解决方案,用最少的代码

+0

我收到空指针异常。你能帮我解决吗? – Tara

+0

在哪一行,你得到错误,你可以检查viewpager是init或不 –

+0

((YourActivityName)的getContext())setAdapter(selectedTabPosition)。 I M使用它在孩子碎片 – Tara