无论何时在视图寻呼机中更改选项卡时如何更新列表 [英] How to update the List whenever the tabs are changing in view pager

查看:9
本文介绍了无论何时在视图寻呼机中更改选项卡时如何更新列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序中,我正在使用使用视图寻呼机的导航选项卡.我已经能够使用发布在以下位置的代码成功绘制标签:

https://github.com/codepath/android_guides/wiki/Sliding-Tabs-with-PagerSlidingTabStrip

在这里,我使用了滑动选项卡和视图寻呼机来获取导航选项卡.一切正常,但是当我移动到另一个选项卡时,列表没有得到更新.OnResume() 被调用,即使对象列表变量也在调试时得到更新,但视觉列表没有得到更新.

这里是一些代码片段:

<块引用>

对于 Tab1 :在我的情况下是 ACTIVE 选项卡

 @Override公共无效 onResume() {超级.onResume();if(!internetUtil.isConnectedToInternet(getActivity())){mSwipeRefreshLayout.setEnabled(false);}别的{mSwipeRefreshLayout.setEnabled(true);新的 GetUsersFromServerTask().execute();//这里我进行网络调用}}

<块引用>

在 Tab2 上:这是存档选项卡

 @Override公共无效 onResume() {超级.onResume();新的 GetUsersArchivedFromServerTask().execute();//网络调用}

在 MainActivity 中:

公共类 MaterialTab 扩展 FragmentActivity {@覆盖protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.material_main_sample);ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);viewPager.setAdapter(new SampleFragmentPagerAdapter(getSupportFragmentManager()));PagerSlidingTabStrip tabsStrip = (PagerSlidingTabStrip) findViewById(R.id.tabs);tabsStrip.setViewPager(viewPager);tabsStrip.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {@覆盖公共无效 onPageSelected(int position) {如果(位置 == 0){ActiveFragment activeFragment = new ActiveFragment();最终 FragmentTransaction ft = getSupportFragmentManager().beginTransaction();ft.detach(activeFragment);ft.attach(activeFragment);ft.commit();} 如果(位置 == 1){ArchiveFragment archiveFragment = new ArchiveFragment();最终 FragmentTransaction ft = getSupportFragmentManager().beginTransaction();ft.detach(archiveFragment);ft.attach(archiveFragment);ft.commit();}}});}}

另外,当我执行 SwipeRefresh 时,列表正在更新.我现在完全困惑为什么会出现这种行为.当我滑动选项卡时,会调用相同的方法并且列表没有更新,但是当我执行 SwipeRefresh 时,它会更新.

这是活动片段:

公共类 ActiveFragment 扩展 Fragment {公共无效更新片段(){新的 GetUsersArchivedFromServerTask().execute();}公共类 GetUsersArchivedFromServerTask 扩展 AsyncTask<User, Void, String>{@覆盖受保护的字符串doInBackground(装运...帕尔马斯){//Log.d(TAG, String.valueOf(shipmentDbHandler.getAllActiveShipments().size()));_userList1 = userDbHandler.getAllActiveUserByToday(DateTimeUtil.getCurrentTime());返回 "";}@覆盖受保护的无效onPreExecute(){super.onPreExecute();}@覆盖受保护的无效 onPostExecute(字符串 str){//在列表加载了一组新数据后,将刷新监听器设置为 falseif (mSwipeRefreshLayout.isRefreshing()) {mSwipeRefreshLayout.setRefreshing(false);}if(_userList1.size() == 0){ViewGroup parentOne = (ViewGroup) viewOne.getParent();if(parentOne != null){parentOne.removeView(viewOne);}}if(_shipmentList1.size() > 0 ){mShipmentAdapter = new ShipmentAdapter(getActivity(),_userList1,1);shipListView1.setAdapter(mShipmentAdapter);setListViewHeightBasedOnChildren(shipmentListView1);ViewGroup parentOne = (ViewGroup) viewOne.getParent();如果(parentOne == null){mainLayoutOne.addView(viewOne);}mShipmentAdapter.notifyDataSetChanged();}mSwipeRefreshLayout.setClickable(true);}}}

解决方案

请使用 FragmentStatePagerAdapter.

In my app i am using navigation tab using view pager. I have able to successfully drawn the tabs using the code posted on:

https://github.com/codepath/android_guides/wiki/Sliding-Tabs-with-PagerSlidingTabStrip

Here i have used the Sliding tab and view pager both to get the navigation tabs.Everything is working fine but the list are not getting updated when i am moving to the other tab. OnResume() is getting called even the Object list variable is also getting updated while debugging but visually list is not getting updated.

Here i am some snippets of the code:

For Tab1 : which in my case is ACTIVE tab

 @Override
    public void onResume() {
        super.onResume();

        if(!internetUtil.isConnectedToInternet(getActivity())){
            mSwipeRefreshLayout.setEnabled(false);
        }else{
            mSwipeRefreshLayout.setEnabled(true);
            new GetUsersFromServerTask().execute();  // Here i am making the network calls 
        }
}

On Tab2 : Which is Archive tab

 @Override
    public void onResume() {
        super.onResume();
        new GetUsersArchivedFromServerTask().execute(); // Network calls
    }

In MainActivity:

public class MaterialTab extends FragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.material_main_sample);
        ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
        viewPager.setAdapter(new SampleFragmentPagerAdapter(getSupportFragmentManager()));
        PagerSlidingTabStrip tabsStrip = (PagerSlidingTabStrip) findViewById(R.id.tabs);
        tabsStrip.setViewPager(viewPager);
        tabsStrip.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                if(position == 0){
                   ActiveFragment activeFragment = new ActiveFragment();
                    final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                    ft.detach(activeFragment);
                    ft.attach(activeFragment);
                    ft.commit();
                } if(position == 1){
                    ArchiveFragment archiveFragment = new ArchiveFragment();
                    final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                    ft.detach(archiveFragment);
                    ft.attach(archiveFragment);
                    ft.commit();
                }
            }
        });
    }
}

Also the thing is when i am doing SwipeRefresh then the List is getting updated. I am now totally confused why this behaviour. When i am swiping the tab the same methods are getting called and thelist is not getting updated but when I am doing SwipeRefresh it's getting Updated.

This is the Active Fragment:

public class ActiveFragment extends Fragment {

public void updateFragment(){
        new GetUsersArchivedFromServerTask().execute();
    }

 public class GetUsersArchivedFromServerTask extends AsyncTask<User, Void, String> {
        @Override
        protected String doInBackground(Shipment... parmas) {
            // Log.d(TAG, String.valueOf(shipmentDbHandler.getAllActiveShipments().size()));
            _userList1 = userDbHandler.getAllActiveUserByToday(DateTimeUtil.getCurrentTime());
            return "";
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected void onPostExecute(String str) {
            // Set the refresh Listener to false after the list has been loaded with new set of data
            if (mSwipeRefreshLayout.isRefreshing()) {
                mSwipeRefreshLayout.setRefreshing(false);
            }

            if(_userList1.size() == 0){
                ViewGroup parentOne = (ViewGroup) viewOne.getParent();
                if(parentOne != null){
                    parentOne.removeView(viewOne);
                }
            }

            if(_shipmentList1.size() > 0 ){
                mShipmentAdapter = new ShipmentAdapter(getActivity(),_userList1,1); 
                shipmentListView1.setAdapter(mShipmentAdapter);
                setListViewHeightBasedOnChildren(shipmentListView1);
                ViewGroup parentOne = (ViewGroup) viewOne.getParent();
                if(parentOne == null){
                    mainLayoutOne.addView(viewOne);
                }

                mShipmentAdapter.notifyDataSetChanged();
            }
            mSwipeRefreshLayout.setClickable(true);
        }
    }
}   

解决方案

PLease use FragmentStatePagerAdapter for that.

这篇关于无论何时在视图寻呼机中更改选项卡时如何更新列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆