0

我在我的 android 应用程序中使用列表视图,其中列表项(在我的情况下是位图图像)是动态加载的。实际上我正在创建位图图像,然后将其一一加载到列表中。我想要的是用一些默认图像显示所有列表项,并在创建位图图像时相应地更新它们。我的代码如下,

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;
    }

};

}

这里我使用了一个向量,在创建每个位图之后,它被插入到该向量中。我正在使用异步任务来创建位图。创建每个位图后,我将调用 notifydatasetchanged() 方法来更新列表视图。但是现在在输出中,每当创建每个位图图像时,它都会在列表视图中添加一个带有该图像的项目。但我的要求是用一些默认图像显示列表中的所有 97 个项目,并且每当创建位图时更新相应的列表项。

谁能帮我??提前致谢....

4

1 回答 1

1

最简单的方法是将默认图像作为ImageView带有 id的 src 包含tImage在您的 layoutlistitem.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);
    }
于 2012-12-11T07:35:20.610 回答