public class PaperListActivity extends Activity{
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.paperlist);
//获取ListView
mListView = (ListView)findViewById(R.id.paperlist_lst);
PaperListAdapter mPaperListAdapter = new PaperListAdapter(this, R.layout.paperlist_item);
new PaperlistTask(this,mPaperListAdapter).execute();//为list加载数据
mListView.setAdapter(mPaperListAdapter);
System.out.println("childcount is : -----"+mListView.getChildCount());
}
}public class PaperListAdapter extends ArrayAdapter<Paper>{
private Context context;
private LayoutInflater inflater;
private int viewId; public PaperListAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
this.context = context;
inflater = LayoutInflater.from(context);
this.viewId = textViewResourceId;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("-----position---" + position);
if(convertView == null){
convertView = inflater.inflate(viewId, parent, false);
}
final Paper mPaper = getItem(position);
TextView titleView = (TextView) convertView.findViewById(R.id.paperlist_item_tv);
titleView.setText(mPaper.getP_name());
convertView.setOnClickListener(new OnClickListener(){ @Override
public void onClick(View v) {
//点击事件
Intent mIntent = new Intent(context,PaperInfoActivity.class);
mIntent.putExtra("paper", mPaper);
context.startActivity(mIntent);
}});
return convertView;
}
}
打印的结果
childcount is : -----0
-----position---0
-----position---1打印“childcount is : -----0”在先,是不是异步加载数据呢?还是怎样,原理怎么样?
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.paperlist);
//获取ListView
mListView = (ListView)findViewById(R.id.paperlist_lst);
PaperListAdapter mPaperListAdapter = new PaperListAdapter(this, R.layout.paperlist_item);
new PaperlistTask(this,mPaperListAdapter).execute();//为list加载数据
mListView.setAdapter(mPaperListAdapter);
System.out.println("childcount is : -----"+mListView.getChildCount());
}
}public class PaperListAdapter extends ArrayAdapter<Paper>{
private Context context;
private LayoutInflater inflater;
private int viewId; public PaperListAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
this.context = context;
inflater = LayoutInflater.from(context);
this.viewId = textViewResourceId;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("-----position---" + position);
if(convertView == null){
convertView = inflater.inflate(viewId, parent, false);
}
final Paper mPaper = getItem(position);
TextView titleView = (TextView) convertView.findViewById(R.id.paperlist_item_tv);
titleView.setText(mPaper.getP_name());
convertView.setOnClickListener(new OnClickListener(){ @Override
public void onClick(View v) {
//点击事件
Intent mIntent = new Intent(context,PaperInfoActivity.class);
mIntent.putExtra("paper", mPaper);
context.startActivity(mIntent);
}});
return convertView;
}
}
打印的结果
childcount is : -----0
-----position---0
-----position---1打印“childcount is : -----0”在先,是不是异步加载数据呢?还是怎样,原理怎么样?
举个例子:某个listview里面有一个显示图片的控件ImageView,该ImageView显示的图片资源来源于互联网,这个时候就要考虑用到异步了,否则Adapter要等所有的图片资源全部得到后才将listview显示出来,如果网络环境不理想,这期间会有“漫长”的等待过程。
具体要怎么实现呢?在getView或者bindview里面首先用一张本地默认的图显示在ImageView里,同时启动线程去网上获取图片资源,一旦某张图片的数据得到就立马刷新将那张本地的图换掉。至于你这个地方是不是异步加载数据,要看PaperlistTask里面干了些什么,你可以贴出来让大家看看。
/**
* Method name: dealWallPaper<BR>
* Method description:处理墙纸 <BR>
*
*/
private void dealWallPaper() {
ImageView imageView03 = (ImageView) this
.findViewById(R.id.ss_01_03_img03);
imageView03.setOnClickListener(new OnClickListener() { public void onClick(View v) {
// show dialog
Context context = v.getContext();
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ListView listView = (ListView) mInflater.inflate(R.layout.listview, null);
// 获得所有的图片
ArrayList<PathName> list = getWallPapers();
// 初始显示5张墙纸
ArrayList<PathName> tempList = new ArrayList<PathName>();
for(int i =0;i< list.size() && i< 5;i++){
tempList.add(list.get(i));
}
// 墙纸显示的适配器
WallPaperAdapter adapter = new WallPaperAdapter(context, tempList);
listView.setAdapter(adapter);
// 异步加载墙纸
showPapers(adapter, list, scene.getWallpaper());
new AlertDialog.Builder(context).setTitle(R.string.ss0103_wallpaper_detail)
.setView(listView)
.setPositiveButton(R.string.common_ok, new WallPaperListener(adapter))
.setNegativeButton(R.string.common_cancel, new WallPaperListener(adapter))
.show();
} });
}
package com.jftt.smart.activity.adapter;import java.util.ArrayList;import android.content.Context;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.TextView;import com.jftt.smart.R;
import com.jftt.smart.pojo.PathName;
import com.jftt.smart.util.SceneUtil;public class WallPaperAdapter extends BaseAdapter {
private LayoutInflater inflater;
private ArrayList<PathName> items;
public WallPaperAdapter(Context context, ArrayList<PathName> list){
this.inflater = LayoutInflater.from(context);
items = new ArrayList<PathName>();
if(list != null){
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 16;
for(PathName bean : list){
bean.image = SceneUtil.decodeBitmap(bean.path, options);
items.add(bean);
}
}
}
public void clear() {
items.clear();
notifyDataSetChanged();
}
public void add(PathName bean) {
items.add(bean);
}
public int getCount() {
// TODO Auto-generated method stub
return items.size();
} public PathName getItem(int position) {
// TODO Auto-generated method stub
return items.get(position);
} public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public boolean isEnabled(int position) {
return false;
} public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_item_001, parent, false);
holder = new ViewHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.li001_img001);
holder.textView = (TextView) convertView.findViewById(R.id.li001_tv001);
holder.radioBtn = (RadioButton) convertView.findViewById(R.id.li001_rb001);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
PathName bean = items.get(position);
holder.imageView.setImageBitmap(bean.image);
holder.textView.setText(bean.name);
holder.radioBtn.setChecked(bean.checked);
holder.radioBtn.setOnClickListener(new SingleChoiceListener(position));
return convertView;
}
private class SingleChoiceListener implements OnClickListener {
private int position;
public SingleChoiceListener(int position) {
this.position = position;
} public void onClick(View arg0) {
items.get(position).checked = true;
for (int i = 0; i < items.size(); i++) {
if (i != position) {
items.get(i).checked = false;
}
}
WallPaperAdapter.this.notifyDataSetChanged();
}
}
}class ViewHolder {
public TextView textView;
public ImageView imageView;
public RadioButton radioBtn;
}