Добавление представления по умолчанию в список в Android

Я использую список в своем приложении для 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 элементов в моем списке с некоторым изображением по умолчанию, и всякий раз, когда создается растровое изображение, обновляйте соответствующий элемент списка.

Может кто-нибудь мне помочь?? Заранее спасибо....


person user456    schedule 11.12.2012    source источник
comment
см. этот stackoverflow.com/questions/541966/   -  person njzk2    schedule 11.12.2012


Ответы (1)


Самым простым было бы включить изображение по умолчанию в качестве источника для ImageView с идентификатором 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);
    }
person Rajesh    schedule 11.12.2012
comment
: пока я делаю это, я получаю исключение arrayindexoutofbound... есть ли какое-то отношение к методу getcount()? - person user456; 11.12.2012
comment
Пожалуйста, проверьте обновленный ответ. Поскольку вы заполняете вектор в AsyncTask, размер вектора может отличаться. Кроме того, жесткое кодирование магических чисел, таких как 97, не рекомендуется. - person Rajesh; 11.12.2012