Android ListView с 2 TextViews на элемент - PullRequest
3 голосов
/ 22 июля 2011

Все примеры, которые я видел в сети, содержат только 1 TextView на элемент, и они загружают данные из массива. Я не понимаю, как мне указать, какие данные куда идут. Например, мой макет элемента выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView android:id="@+id/receiver"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

Как сохранить данные в массиве, чтобы их можно было использовать в ListView с этим макетом?

Ответы [ 2 ]

2 голосов
/ 22 июля 2011

Адаптер пользовательского списка:

private class ListAdapter extends ArrayAdapter<RSSItem> {

        private List<Item> items;

        public ListAdapter(Context context, int textViewResourceId, List<Item> items) {
            super(context, textViewResourceId, items);
            this.items = items;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;

            if (v == null) {
                LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.list_item, null);
            }

            Item item = items.get(position);

            if (item != null) {             
                TextView title = (TextView) v.findViewById(R.id.tvTitle);
                TextView description = (TextView) v.findViewById(R.id.tvDescription);
                if (title != null) {
                    title.setText(item.getTitle());
                }
                if (description != null) {
                    description.setText(item.toString());
                }
            }

            return v;
        }
    }

Это Item класс, ведьма будет хранить ваши данные:

public class Item {
    private String title = null;
    private String description = null;

    RSSItem() {
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getTitle() {
        return title;
    }

    public String getData() {
        return data;
    }
}

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

public class ListData {
    private int itemcount = 0;
    private List<Item> itemlist;

    ListData () {
        itemlist = new Vector<Item>();
    }

    int addItem(Item item) {
        itemlist.add(item);
        itemcount++;
        return itemcount;
    }

    Item getItem(int location) {
        return itemlist.get(location);
    }

    List<Item> getAllItems() {
        return itemlist;
    }

    int getItemCount() {
        return itemcount;
    }
}

В вашем основном классе ( Activity ) Вы должны правильно заполнить свои данные.

0 голосов
/ 22 июля 2011

С помощью адаптера вы снабжаете список данными данными. А когда вы вводите метод getView (), вы добавляете данные в эти TextViews. В сети тысячи примеров ...

Вот один из примеров (Конечно, можно усовершенствовать этот код)

   @Override
    public View getView(int position, View convertView, ViewGroup parent) throws NullPointerException {
        ViewHold viewHold;
      if (convertView == null) 
      {
       LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
       convertView = vi.inflate(R.layout.temp2, null);
       viewHold = new ViewHold();           
       viewHold.go = (Button)convertView.findViewById(R.id.gotherefav);   
       viewHold.remove = (Button)convertView.findViewById(R.id.removefav);

       convertView.setTag(viewHold);
      }
      else
      {
          viewHold=(ViewHold)convertView.getTag();
      }


  String t = items.get(position);
  if (t != null) {

            TextView itemText = (TextView) convertView.findViewById(R.id.item); // here you add data from arrayLists   
         TextView itemText2 = (TextView) convertView.findViewById(R.id.item2);
itemText2.setText(t);

            itemText.setText(t);
            itemText.invalidate();


           }
  viewHold.go.setVisibility(View.GONE);
  viewHold.remove.setVisibility(View.GONE);


  return convertView;

    }
}
...