package com.example.listviewflash;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListFragment;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
/**
*
* @author xiaoxi
* @see comm
*
*/
public class MyListFragment extends ListFragment implements OnScrollListener {
protected static final String TAG = "MyListFragment";
private List<MyEntity> entitieList;// json数据集合
private MyEntity myEntity;// json数据的entity
private MyListFragmntAdapter adapter;// fragment的适配器
private LinearLayout footView;// 加载画面时显示的布局控件
private TextView tv_load;// footView的控件
private ProgressBar pb_load;// footView的控件
private int pageNo = 1;// 页数
private TextView empty;// listview无数据显示的内容
private ListView listView;//
boolean isLoading = false;// 是否滑动的标志位
String shuming = "";
String bookid = "";
private int totalPages;// 总页数
private int totalRecord;// 总记录数
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 10:
// listview无数据时显示empty textview
if (entitieList == null || entitieList.size() <= 0) {
getListView().setVisibility(View.GONE);
empty.setVisibility(View.VISIBLE);
return;
}
listView.addFooterView(footView);
Log.e(TAG, "====================第一次添加footview==");
adapter = new MyListFragmntAdapter(getActivity(), entitieList);
setListAdapter(adapter);
// 此处一下为当数据不足一页时移除footview并吐司
afterLoadingData();
if (adapter.getCount() >= totalRecord) {
Toast.makeText(getActivity(), "数据全部加载!", 0).show();
}
break;
case 110:
List<MyEntity> myanswerModels = new ArrayList<MyEntity>();
myanswerModels = (List<MyEntity>) msg.obj;
if (myanswerModels != null && myanswerModels.size() > 0) {
adapter.addExtra(myanswerModels);
afterLoadingData();
}
if (adapter.getCount() >= totalRecord) {
Toast.makeText(getActivity(), "数据全部加载!", 0).show();
}
break;
}
};
};
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.fragmentlayout, null, false);
// 系统的listview在此处直接findViewById,如果getListView()的话会报错
// java.lang.IllegalStateException: Content view not yet
// created(ListFragment)
listView = (ListView) view.findViewById(android.R.id.list);
empty = (TextView) view.findViewById(android.R.id.empty);
footView = (LinearLayout) LayoutInflater.from(getActivity()).inflate(
R.layout.listview_item, null, false);
tv_load = (TextView) footView.findViewById(R.id.tv_load);
pb_load = (ProgressBar) footView.findViewById(R.id.pb_load);
// 页数在这里重新定义,因为当viewpager里的几个fragment滑动切换时fragment从回退站返回栈顶,fragment的周期是从
// onDestroyView到onCreateView重新加载数据(否则会显示footview)
pageNo = 1;
listView.setOnScrollListener(this);
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
entitieList = getNetWorkData(pageNo, shuming, bookid);
Message message = Message.obtain();
message.what = 10;
handler.sendMessage(message);
}
}).start();
return view;
}
// 模拟下载网络数据
public List<MyEntity> getNetWorkData(Integer page_no, String params1,
String params2) {
List<MyEntity> list = new ArrayList<MyEntity>();
// 地址
String url = "";
// 其他参数
String params = "";
String json = HttpUtils.getDataByPost(url, params);
try {
JSONArray array = new JSONArray(json);
for (int i = 0; i < array.length(); i++) {
JSONObject jsonObject = array.getJSONObject(i);
myEntity = MyEntity.parseMyEntityData(jsonObject);
list.add(myEntity);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
public void afterLoadingData() {
listView.removeFooterView(footView);
isLoading = false;
}
@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
// 滑动加载数据
int lastItem = listView.getLastVisiblePosition();
// totalItem = totalItemCount;
// Log.e(TAG, "====lastItem:tt====" + lastItem);
if (lastItem + 1 >= totalItemCount) {
if (pageNo < totalPages && !isLoading) {
listView.removeFooterView(footView);
listView.addFooterView(footView);
Log.e(TAG, "====================第二次添加footview==");
isLoading = true;
pageNo++;
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
List<MyEntity> myanswerModels = new ArrayList<MyEntity>();
myanswerModels = getNetWorkData(pageNo, shuming, bookid);
Message message = Message.obtain();
message.what = 110;
message.obj = myanswerModels;
handler.sendMessage(message);
}
}).start();
}
}
}
}
本例子 在listview上拉时并执行viewpager里多个fragment切换 操作 可能会报cannot be cast to android.widget.HeaderViewListAdapter
希望大神指教。。
listview 上拉加载更多
最新推荐文章于 2025-05-27 14:24:20 发布