国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

SwipeRefreshLayout下拉刷新跟listview下拉滑動(dòng)沖突解決

2019-11-09 19:05:04
字體:
供稿:網(wǎng)友
當(dāng)SwipeRefreshLayout內(nèi)嵌listview的時(shí)候,滑動(dòng)listview的時(shí)會(huì)啟動(dòng)swipeRefreshLayout的下拉刷新。我使用的解決辦
法是設(shè)置listview的滑動(dòng)監(jiān)聽,重寫滑動(dòng)監(jiān)聽器,通過判斷l(xiāng)istview的第一可視item的index來判斷是否需要刷新,如果不
需要就把swipeRefreshLayout設(shè)置成不可滑動(dòng),否則設(shè)置成可滑動(dòng)。
我的listview放在了fragment里面,所以我用了最笨的方法,在fragment的構(gòu)造方法里把a(bǔ)ctivity的swipeRefreshLayout
對(duì)象傳遞給了fragment:
MyManageFragment 
manageFragment = new MyManageFragment(
swipeRefreshLayout
);
transation.add(R.id.activity_mydevice_container, manageFragment);
transation.commit();
然后在fragment的onCreateView里面設(shè)置其listview的滑動(dòng)監(jiān)聽:
listview.setOnScrollListener(new SwpipeListViewOnScrollListener(swipeRefreshLayout));
   然后重寫滑動(dòng)監(jiān)聽器,通過判斷l(xiāng)istview的第一個(gè)可視的item的位置來決定是下拉刷新還是下滑,判斷到是下滑的時(shí)候,
通過設(shè)置傳入的
swipeRefreshLayout對(duì)象
使其不可用: 
swipeRefreshLayout
.setEnabled(false);
重寫監(jiān)聽器:
/** * 由于Listview與下拉刷新的Scroll事件沖突, 使用這個(gè)ScrollListener可以避免Listview滑動(dòng)異常 */public class SwpipeListViewOnScrollListener implements AbsListView.OnScrollListener {    PRivate SwipeRefreshLayout mSwipeView;    private AbsListView.OnScrollListener mOnScrollListener;    public SwpipeListViewOnScrollListener(SwipeRefreshLayout swipeView) {        mSwipeView = swipeView;    }    public SwpipeListViewOnScrollListener(SwipeRefreshLayout swipeView,                                          AbsListView.OnScrollListener onScrollListener) {        mSwipeView = swipeView;        mOnScrollListener = onScrollListener;    }    @Override    public void onScrollStateChanged(AbsListView absListView, int i) {    }    @Override    public void onScroll(AbsListView absListView, int firstVisibleItem,                         int visibleItemCount, int totalItemCount) {        View firstView = absListView.getChildAt(firstVisibleItem);        // 當(dāng)firstVisibleItem是第0位。如果firstView==null說明列表為空,需要刷新;或者top==0說明已經(jīng)到達(dá)列表頂部, 也需要刷新        if (firstVisibleItem == 0 && (firstView == null || firstView.getTop() == 0)) {            mSwipeView.setEnabled(true);//可刷新            } else {            mSwipeView.setEnabled(false);//不能刷新,此時(shí)為滑動(dòng)        }        if (null != mOnScrollListener) {            mOnScrollListener.onScroll(absListView, firstVisibleItem,                    visibleItemCount, totalItemCount);        }    }}
PS: 一開始想在activity里獲取到frgment里面的listview對(duì)象,在activity里設(shè)置listview的滑動(dòng)監(jiān)聽器,但是沒有成功,對(duì)
于fragment和activity的交互,理解還不是很夠。
MyManageFragment 
manageFragment = new MyManageFragment(
);
transation.add(R.id.activity_mydevice_container, manageFragment,"mymanage_fragment");
transation.commit();
getSupportFragmentManager().executePendingTransactions(); //1--------------MymanageFragment myManageFragment = (MymanageFragment) getSupportFragmentManager().findFragmentByTag("mymanage_fragment");if (myManageFragment != null) {    ListView listView = (ListView) myManageFragment.getView().findViewById(R.id.listview_mymanage);    listView.setOnScrollListener(new SwpipeListViewOnScrollListener(swipeRefreshLayout));} else {    toast("myManageFragment is null");}
其中 myManageFragment.getView()返回的是null,有待進(jìn)一步解決

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 沁水县| 泊头市| 灌云县| 诸城市| 苍山县| 特克斯县| 遂宁市| 遂溪县| 泽库县| 高邑县| 综艺| 阜康市| 化州市| 滦平县| 岑巩县| 同江市| 平乐县| 石林| 阿尔山市| 阿合奇县| 昔阳县| 阳高县| 灌云县| 黄浦区| 教育| 酒泉市| 鄂尔多斯市| 定日县| 内江市| 吴江市| 五峰| 若尔盖县| 东兰县| 潮州市| 林口县| 南平市| 渑池县| 英山县| 霞浦县| 安塞县| 上蔡县|