我在我的android应用程序中使用listview,其中listitems(在我的例子中是位图图像)是动态加载的。实际上我正在创建位图图像,然后将其逐个加载到列表中。我想要的是显示所有列表项与一些默认图像,并在创建位图图像时相应地更新它们。我的代码如下,
public class BitmapDemoActivity extends Activity {
HorizontalListView listview;
Vector<Bitmap> thumbImg;
BitmapCreator creator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listviewdemo);
creator=new BitmapCreator();
thumbImg= new Vector<Bitmap>(97);
listview = (HorizontalListView)findViewById(R.id.listview);
listview.setAdapter(new BitmapAdapter());
new AsyncBitmapCreate().execute();
}
private class AsyncBitmapCreate extends AsyncTask<Void, Bitmap, Void>{
//Bitmap[] temp=new Bitmap[44];
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
for(int i=0;i<97;i++){
publishProgress(creator.generateBitmap(i+1));
}
return null;
}
@Override
protected void onProgressUpdate(Bitmap... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
new BitmapAdapter().add(values[0]);
new BitmapAdapter().notifyDataSetChanged();
}
}
class BitmapAdapter extends BaseAdapter{
public void add(Bitmap bitmap)
{
Log.w("My adapter","add");
thumbImg.add(bitmap);
}
@Override
public int getCount() {
return thumbImg.capacity();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
View retval = inflater.inflate(R.layout.listitem, null);
ImageView img = (ImageView) retval.findViewById(R.id.tImage);
img.setImageBitmap(thumbImg.get(position));
return retval;
}
};
}
这里我使用的是一个向量,在创建每个位图之后,它会被插入到该向量中。我正在使用asynctask来创建位图。创建每个位图后,我调用notifydatasetchanged()方法来更新列表视图。但是现在在每次创建每个位图图像时的输出中,它都会在列表视图中添加一个带有该图像的项目。但我的要求是使用一些默认图像显示列表中的所有97个项目,并且每当创建位图时都会更新相应的列表项。
谁能帮助我?提前谢谢....答案 0 :(得分:1)
最简单的方法是将默认图片作为ImageView
的src包含在您的布局tImage
中,标识为listitem.xml
。在getView方法中,如果该位置的位图可用,则替换默认图像。
ImageView img = (ImageView) retval.findViewById(R.id.tImage);
Bitmap bmp = null;
if(position < thumbImg.size()){
thumbImg.get(position);
}
if(null != bmp){
img.setImageBitmap(bmp);
}