【问题标题】:Android ListView With 2 TextViews Per ItemAndroid ListView,每个项目有 2 个 TextView
【发布时间】:2011-07-22 17:46:58
【问题描述】:

我在网上看到的所有示例每个项目仅包含 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 中使用?

【问题讨论】:

标签: android android-listview adapter


【解决方案1】:

这是自定义列表适配器:

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) 中,您应该正确填写数据。

【讨论】:

    【解决方案2】:

    使用 Adapter,您可以向列表视图提供数据。当您输入 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;
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多