Как я могу использовать ArrayAdapter для отображения списка?

1

Привет, я хочу отобразить представление списка в своем приложении. Каждая строка должна содержать текст и изображение. Я использовал ArrayAdapter, чтобы отобразить это, но как вставить изображение после текста.

String lvr[]={"Android","iPhone","BlackBerry","AndroidPeople"};
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
list1 = (ListView) findViewById(R.id.cg_listview1);
list1.setAdapter(new ArrayAdapter<String>(this,R.layout.alerts , lvr));

Здесь оповещения - мой макет содержит только textView.

Теги:

3 ответа

1
Лучший ответ

Если вы хотите контролировать, как выглядит макет элементов в представлении списка, вы должны сделать свою собственную реализацию ArrayAdapter:

ListAdapter, который управляет ListView поддерживаемый массивом произвольных объекты. (...) Чтобы использовать что-то другое чем TextViews для отображения массива, например, ImageViews, или иметь некоторые данные, кроме toString() результаты заполняют представления, отменят getView (int, View, ViewGroup) для верните тип вида, который вы хотите.

Если вы просто используете Google примерный пример адаптера массива, вы должны найти достаточно примеров, показывающих, как это реализовать. Два таких примера:

Удачи:)

  • 0
    Отказ от ответственности: я нахожусь на мобильном банкомате, поэтому для простоты я просто скопировал ответ, который я сделал на аналогичный вопрос ранее.
1

Код с изменениями текстового вида. ArrayList является общим, но вы должны использовать ArrayList для создания, вставки и удаления для работы.

public class ListViewLearn extends Activity {

    public Button btnAddData;
    public ListView listShow;
    public listRayAdapter adapter;
    public ArrayList<Integer> tmpStrRay;
    public Resources mainRes;

    public void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.mainlistlayout);

        tmpStrRay = new ArrayList<Integer>();
        tmpStrRay.add(1);
        tmpStrRay.add(2);
        tmpStrRay.add(3);
        mainRes= getApplicationContext().getResources();
        adapter = new listRayAdapter(getApplicationContext(),R.layout.listitem, tmpStrRay);

        btnAddData = (Button) findViewById(R.id.btnAddData);

        btnAddData.setOnClickListener(clickit);
        listShow= (ListView) findViewById(R.id.listShow);
        listShow.setAdapter(adapter);

        super.onCreate(savedInstanceState);

    }

    final OnClickListener clickit = new OnClickListener(){

        @Override
        public void onClick(View v) {
            for (int xx=4; xx<=50; xx++){ 
                adapter.add(new Integer(xx));
            }
        }};

    class listRayAdapter extends ArrayAdapter<Integer>
    {
        private ArrayList<Integer> items;
        Bitmap tmpImg;

        public listRayAdapter(Context context, int textVwId, ArrayList<Integer> txtRay)
        {
            super(context,textVwId,txtRay);
            this.items = txtRay;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View newv= convertView;
            if (newv == null) {
                LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                newv = vi.inflate(R.layout.listitem, null);
            }
            if ((position%2)==0){
                tmpImg = BitmapFactory.decodeResource(mainRes, R.drawable.even);
            }else{
                tmpImg = BitmapFactory.decodeResource(mainRes, R.drawable.odd);
            }

            ImageView img = (ImageView) newv.findViewById(R.id.img);
            img.setImageBitmap(tmpImg);
            TextView tt= (TextView) newv.findViewById(R.id.listedItem);
            Integer tmpInt = new Integer(items.get(position));
            tt.setText(tmpInt.toString());
            return newv;
        }

    }
}
1

Для этого вам нужно создать пользовательский адаптер.

public class ResultAdapter extends BaseAdapter {

    private final Context context;
    private final List<Result> results;

    public ResultAdapter(Context context, List<Result> results) {
        this.context = context;
        this.results = results;
    }    

    @Override
    public int getCount() {
        return this.results.size();
    }

    @Override
    public Object getItem(int position) {
        return this.results.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    }
}

Создайте класс Result для хранения текста и изображения. В методе getView создайте свой вид либо программно, либо загрузив его из XML-макета, используя LayoutInflater.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню