ListView,每行包含自定义布局

时间:2012-03-31 10:32:49

标签: java android listview android-layout

我为每行设置了一个包含布局XML的列表视图:

    this.setContentView(R.layout.item_view);

    ListView m_ListView = this.getListView();
    m_ListView.setTextFilterEnabled(true);
    m_ListView.setItemsCanFocus(false);
    m_ListView.setCacheColorHint(0x00000000);
    mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    ArrayList<View> views=new ArrayList<View>();
    e = mInflater.inflate(R.layout.item_first, null);

    views.add(e);

    r = mInflater.inflate(R.layout.item_second, null);

    views.add(r);


    mAdapter = new SillyAdapter(views);
    setListAdapter(mAdapter);

现在例如我在TextView中有一个item_first,我想从代码中设置它:

    TextView name = (TextView)findViewById(R.id.textView1);
    name.setText(m_item.name);

但是名字总是空的。知道为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

您必须在代码中进行以下更改。

TextView name = (TextView)e.findViewById(R.id.textView1);
name.setText(m_item.name);

由于您从错误的视图调用findViewById方法或者可能是从活动调用,因此您将名称设置为null。 因为你膨胀如下

 e = mInflater.inflate(R.layout.item_first, null);

你必须在膨胀的视图 e 上调用findViewById。这样你就可以得到包含在xml中的id R.id.textView1 的textview实例 R.layout.item_first

希望这会有所帮助。