Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ViewPager刷新片段_Android_Android Fragments_Tabs_Android Viewpager_Viewpagerindicator - Fatal编程技术网

Android ViewPager刷新片段

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

在我的应用程序中有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(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();
        }
    }}