0

私はAndroidアプリケーションでリストビューを使用しています。このリストでは、リストアイテム(私の場合はビットマップイメージ)が動的に読み込まれます。実際、私はビットマップ画像を作成していて、それを1つずつリストにロードします。私が欲しいのは、すべてのリストアイテムをデフォルトの画像で表示し、ビットマップ画像が作成されたときにそれに応じて更新することです。私のコードを以下に示します。

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()メソッドを呼び出してリストビューを更新しています。ただし、各ビットマップイメージが作成されるたびに出力で、そのイメージとともにリストビューに1つのアイテムが追加されます。ただし、私の要件は、リスト内の97個のアイテムすべてをデフォルトの画像で表示し、ビットマップが作成されるたびに対応するリストアイテムを更新することです。

誰かが私を助けることができますか?前もって感謝します....

4

1 に答える 1

1

最も簡単な方法は、レイアウトのImageViewwith idの src としてデフォルトの画像を含めることです。getView メソッドで、その位置のビットマップが利用可能な場合は、デフォルトの画像を置き換えます。tImagelistitem.xml

    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 に答える