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

Я хочу отобразить представление списка в моем приложении.Каждая строка должна содержать текст и изображение.Я использовал 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 голос
/ 21 декабря 2010

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

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

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

Удачи:)

1 голос
/ 19 апреля 2011

Код с изменениями текстового представления.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 голос
/ 21 декабря 2010

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

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 создайте свой View либо программно, либо загрузив его из макета XML с помощью LayoutInflater .

...