每个项目有2个TextView的Android ListView

时间:2011-07-22 17:46:58

标签: android android-listview adapter

我在网上看到的所有示例每个项目只包含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 个答案:

答案 0 :(得分:2)

以下是自定义列表适配器:

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;
        }
    }

这是 项目 类,会保存您的数据:

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;
    }
}

在您的主要课程( 活动 )中,您应该正确填写您的数据。

答案 1 :(得分:0)

使用适配器,您可以为listview提供数据。当您使用getView()方法提供数据时,您可以向这些TextView添加数据。网上有成千上万的例子......

这是一个例子(可以完成对这些代码的改进,当然)

   @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;

    }
}