的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;
}
我想我的刷卡应用程序刷新片段和点击选项卡标题,因为这不要不会发生,我希望你能帮助我。
我敢肯定这是不是这样做的唯一/最好的方法。但是,这应该解决问题,因为它对我做了。
请在 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();
你好,谢谢你,但给我的错误...屏幕:[点击这里](http://cineblog01.be/cattura.png) –
错误MyAdapter()???? – uday
好吧,我解决了,但我有新的错误:[点击这里](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
进行投射。
此代码共享不仅能帮助目的谁找到工作的解决方案,用最少的代码
你可以检查[这个例子](https://开头github上。COM/CabezasGonzalezJavier/RefreshCurrentFragmentWithinViewPager) – Cabezas