在ViewPager+Fragment体系下,使用下拉刷新控件的问题

  今天在做模仿微信的界面时,想要使用下拉刷新控件,就去Github上找了个最常用的,在仿照它示例中的配置完成代码修改后,结果并不能在Fragment中使用.不能使用的原因就是,开源框架中的前提是使用在Activity中的,并不是在Fragment中,好在Fragment中只用一个ListView,于是重新修改.下面贴一下代码,首先是布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/chat_msg_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_weight="1" />

</LinearLayout>


布局上没啥变化.下面是Java代码:定义的是两个ListView,

private ListView listView;
	private PullToRefreshListView mPullToRefreshListView;
	private List<ChatFragmentMsg> list = new ArrayList<ChatFragmentMsg>();
	private LvAdapter adapter;

我们后边需要用这个下拉刷新的PullToRefreshListview去替代布局中的ListView.

@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View view = inflater.inflate(R.layout.fragment_chat, null);<pre name="code" class="java">                listView = (ListView) view.findViewById(R.id.chat_msg_list);
		// 创建下拉刷新的ListView
		mPullToRefreshListView = new PullToRefreshListView(getActivity());
		// 将ListView的宽高赋予这个组件
		mPullToRefreshListView.setLayoutParams(listView.getLayoutParams());
		adapter = new LvAdapter(context, R.layout.chat_item, list);
		mPullToRefreshListView.setAdapter(adapter);
		mPullToRefreshListView.setOnRefreshListener(new OnRefreshListener() {
			
			@Override
			public void onRefresh() {
				// 刷新时执行异步任务
				new AsyncTask<Void, Void, Void>() {

					@Override
					protected Void doInBackground(Void... params) {
					    SystemClock.sleep(1000);
					    // 构造新的信息!
					    ChatFragmentMsg msg = new ChatFragmentMsg(null, "新联系人", "下拉刷新构造的数据", 
								(new SimpleDateFormat().format(new Date())).toString());
						list.add(msg);
						return null;
					}
					
					@Override
					protected void onPostExecute(Void result) {
						super.onPostExecute(result);
						// 刷新列表
						adapter.notifyDataSetChanged();
						mPullToRefreshListView.onRefreshComplete();
					}
				}.execute();
			}
		});

 

这样我们就完成了对ListView的替换,再次运行的时候就不会报错了!

参考解决方法:http://stackoverflow.com/questions/16493243/pulltorefresh-list-in-paged-fragment

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值