您的位置:首页 > 其它

fragment、ListFragment使用ListView及自定义Listview等初始化操作

2012-12-31 13:38 441 查看
fragment、ListFragment使用ListView及自定义Listview等初始化操作

1.先说一下 从官方api中说fragment碎片中使用Listview有专门的 ListView碎片-> ListFragment 而不能继承Fragment

官方api相关连接:http://developer.android.com/guide/components/fragments.html

2.不废话直接上代码,这是我项目种的代码 2.1版本同样适用

父类封装:

public class BaseListFragment extends ListFragment {
public Map<String, String> map;
public String tag = this.getClass().getSimpleName(); // tag 用于测试log用
public Context context; // 存储上下文对象
public Activity activity; // 存储上下文对象

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = getActivity();
activity = getActivity();
}
}


子类实现:

/**
* 新闻分类页面
* @author chen
* @date 2012-12-18 下午5:48:02
*/
public class NewsFragment extends BaseListFragment {
/** 请求url */
private String url;
/** ListView */
private PullListView mListView;
//	/** 分页 */
//	private Page page = new Page();
/** 商铺适配器 */
private Adapter mAdapter = new Adapter(activity);;
/** 集合数据 */
public ArrayList<News> mListData;
/** 是否重新加载 */
private boolean isClear;

private LayoutInflater mInflater;
/** 新闻详细页面 url */
private String detailUrl = C.http.http_news_detail;

public NewsFragment(){}
public NewsFragment(Context context, String url) {
this.context = context;
this.url = url;
mListData = null;
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(tag, "onCreate");
}

// 加载多次
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.i(tag, "onActivityCreated");
mListView = (PullListView) getListView();//(ListView) activity.findViewById(android.R.id.list);
if(mListData != null && mListData.size() > 0) {
return;
}

mListData = new ArrayList<News>();
setListAdapter(mAdapter);
mListView.onRefreshComplete();
mListView.setonRefreshListener(new OnRefreshListener() {
public void onRefresh() {
isClear = true;
// 初始化数据
AnsynHttpRequest.requestByGet(context, callbackData, R.string.http_news, url, true, true, true);
}
});
// 初始化数据
AnsynHttpRequest.requestByGet(context, callbackData, R.string.http_news, url, true, true, false);
}

// 加载多次
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.fragment_news_or_hotline, container, false);
mInflater = inflater;
Log.i(tag, "onCreateView");
return view;
}
@Override
public void onStart() {
Log.i(tag, "onStart");
super.onStart();
}
@Override
public void onStop() {
super.onStop();
Log.i(tag, "onStop");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i(tag, "onDestroy");
}

/**
* 异步回调回来并处理数据
*/
private ObserverCallBack callbackData = new ObserverCallBack(){
public void back(String data, int url) {
Message msg = new Message();
switch (url) {
case R.string.http_news: // 解析主题信息数据
msg = new Message();
if(data == null) {
msg.what = 2;
mHandler.sendMessage(msg);
return;
}
try {
News news = new News();
ArrayList<News> dataInfo = news.getListInfo(data);
if(isClear) {
if(dataInfo != null && dataInfo.size()>0) mListData.clear();
isClear = false;
}

if(mListData != null && mListData.size() > 0)
msg.what = 1;
else
msg.what = 0;
if(dataInfo == null || dataInfo.size() == 0){
if( mListData != null && mListData.size() > 0){
msg = new Message();
msg.what = 2;
mHandler.sendMessage(msg);
return;
}
} else {
mListData.addAll(dataInfo);
}
mHandler.sendMessage(msg);
} catch (Exception e) {
e.printStackTrace();
}

break;
case R.string.http_news_detail:
msg = new Message();
if(data == null) {
msg.what = 2;
mHandler.sendMessage(msg);
return;
}
try {
NewsDetail newsDetail = new NewsDetail();
newsDetail = newsDetail.getInfo(data, detailUrl);
msg.what = 3;
msg.obj = newsDetail;
if(newsDetail.content == null || newsDetail.content.length() == 0){
msg = new Message();
msg.what = 2;
mHandler.sendMessage(msg);
return;
}
mHandler.sendMessage(msg);
} catch (Exception e) {
msg = new Message();
msg.what = 2;
mHandler.sendMessage(msg);
}
break;
default:
break;
}
};
};

private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
mAdapter.notifyDataSetChanged();
mListView.onRefreshComplete();
//		    	if(mListData.size() == 0){
////                    Toast.makeText(context, R.string.dialog_title_nowData, Toast.LENGTH_LONG).show();
//                    mListView.setVisibility(View.GONE);
//		    	} else mListView.setVisibility(View.VISIBLE);
break;
case 1:
mAdapter.notifyDataSetChanged();
//				if(mListData.size() == 0){
////                    Toast.makeText(context, R.string.dialog_title_nowData, Toast.LENGTH_LONG).show();
//                    mListView.setVisibility(View.GONE);
//		    	}else mListView.setVisibility(View.VISIBLE);
break;
case 2:
Toast.makeText(context, R.string.no_data, Toast.LENGTH_LONG).show();
break;
case 3:
NewsDetail newsDetail = (NewsDetail) msg.obj;
Intent intent = new Intent(context, NewsDetailActivity.class);
intent.putExtra("content", newsDetail.content);
intent.putExtra("hostUrl", newsDetail.hostUrl);
startActivity(intent);
break;
default:
break;
}
}
};

public final class ViewHolder {
public TextView title;
public TextView time;
}

// 添加列表内容
public class Adapter extends BaseAdapter {
public Adapter(){}
@Override
public boolean areAllItemsEnabled() {
return super.areAllItemsEnabled();
}

public Adapter(Context context) {
}
@Override
public int getCount() {
return mListData.size();
}
@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
final News news = mListData.get(position);
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.list_item_mian, null);
holder.title = (TextView) convertView.findViewById(R.id.list_main_txt_title);
holder.time = (TextView) convertView.findViewById(R.id.list_main_txt_time);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

// 进行数据设置
holder.title.setText(news.title);
holder.time.setText(news.time);
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) { // 加载详细新闻
detailUrl = mListData.get(position).childUrl;
AnsynHttpRequest.requestByGet(context, callbackData, R.string.http_news_detail, detailUrl, true, true, false);
}
});
return convertView;
}
}
}


layout 如下:里面引用的是网上找的自定义下拉上啦刷新 可自行去找

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

<com.vv.apps.hua.app.base.view.PullListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="@color/transparent"
android:divider="@null"
android:dividerHeight="0dp"
android:fastScrollEnabled="true"
android:focusable="true"
/>

</LinearLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: