ListView的onScroll没有作用
最近我仿照知乎日报做一个app,我在使用ListView实现上拉加载更多数据的时候,ListView的onScroll没有作用。
onScroll的方法内用log打印信息,只有在ListView刚创建的时候能打印出信息,ListView创建完成后,滑动屏幕,没有任何效果。
我甚至为ListView添加onItemClickListener也没有任何效果。我怀疑是ListView没有获得焦点导致的。然后在网上查找资料,尝试给ListView设置setFocusable() 和setFocusableInTouchMode()方法以及添加 android:descendantFocusability 标签也没有任何作用。
下面是大致的代码:
ListView是放在一个Fragment里面显示的,且ListView的父容器是一个SwipeRefreshLayout。
Fragment所在Activity的布局是一个DrawerLayout:
xml文件里面的Fragment是Android侧边栏的模块。ListView所在的Fragment是放在news_main.xml的linerlayout里面的
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<include layout="@layout/news_main" />
<fragment
android:name="cc.hqu.sends.myzhihudaily.ui.fragment.MenuFragment"
android:id="@+id/menu_fragment"
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_gravity="start"
tools:layout="@layout/menu_item" />
</android.support.v4.widget.DrawerLayout>
SwipeRefreshLayout布局:
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/news_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/news_lv"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v4.widget.SwipeRefreshLayout>
ListView里面的item只有TextView和ImageView。
ListView所在的Fragment的代码如下
public class NewsFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener{
private ListView mListView;
private SwipeRefreshLayout mSwipeRefreshLayout;
private String url;
private ParseNews mParseNews;
private Calendar date;
private SimpleDateFormat mDateFormat;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.news_list, null);
mListView = (ListView) view.findViewById(R.id.news_lv);
mSwipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.news_refresh);
mSwipeRefreshLayout.setOnRefreshListener(this);
if ((url = getArguments().getString("url")) == null) {
url = Constants.URL.ZHIHU_DAILY_NEWS_LASTEST;
}
// mListView.setAdapter(new NewsAdapter(this, mListView, new ParseNews(Constants.URL.ZHIHU_DAILY_NEWS_LASTEST).getNews()));
mParseNews = new ParseNews(getActivity(), url, mListView, mSwipeRefreshLayout, true);
mParseNews.execute();
mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
Log.d("tab", "onScroll");
}
});
//获得日期
mDateFormat = new SimpleDateFormat("yyyyMMdd");
date = Calendar.getInstance();
date.setTime(new Date());
return view;
}
@Override
public void onRefresh() {
new ParseNews(getActivity(), url, mListView, mSwipeRefreshLayout).execute();
}
}
ListView还设置了ViewPager做图片轮播头部:
ViewPager的item也只有TextView和ImageView
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/main_header_vp"
android:layout_width="match_parent"
android:layout_height="200dp"/>
<LinearLayout
android:id="@+id/main_header_dots"
android:layout_alignBottom="@id/main_header_vp"
android:padding="5dp"
android:gravity="center"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
ViewPager的OnPageChangeListener只是设置图片自动播放:
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
//页面滚动完成后,刷新轮播指示器
dots.get((position - 1 + pageLength) % pageLength).setImageResource(R.drawable.dot_blur);
dots.get(position % pageLength).setImageResource(R.drawable.dot_focus);
dots.get((position + 1) % pageLength).setImageResource(R.drawable.dot_blur);
}
@Override
public void onPageScrollStateChanged(int state) {
switch (state) {
case ViewPager.SCROLL_STATE_IDLE:
mRefreshLayout.setEnabled(true);
break;
case ViewPager.SCROLL_STATE_DRAGGING:
mRefreshLayout.setEnabled(false);
resetHeaderTimer();
break;
case ViewPager.SCROLL_STATE_SETTLING:
mRefreshLayout.setEnabled(true);
}
}
最后,我还尝试把ListView的头部和activity里面的侧边栏删除,依然没有任何效果。
刚学习Android没多久就遇到这么一个问题,希望能够解答。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
应该是ListView的适配器把你的滑动事件给拦截了,你让你的ListView适配器同时去实现AbsListView.OnScrollListener,在然后再
ListView.setAdapter(adapter);
ListView.setOnScrollListener(adapter);
试试这样行不行。
你没有为mListView设置适配器,没有数据item如何滑动与点击
mListView.setAdapter(xxx);//xxx adapter