今天在做模仿微信的界面时,想要使用下拉刷新控件,就去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