如何获取复杂的ListView行视图中的视图?

时间:2011-11-18 05:00:50

标签: android eclipse android-layout

我有一个ListView,它由使用适配器的数据行填充。 行布局为“RelativeLayout”类型,包含各种视图对象,其中一个的id为“@ + id / bar_fill”。

我有一个循环遍历ListView的所有子节点,我想“获取”上面提到的视图项。

我正在使用的代码是:

ListView list = getListView();
int count = list.getCount();
for (int i = 0; i < count; i++) 
{
   RelativeLayout row = (RelativeLayout) list.getChildAt(i);
   View bar = row.findViewById(R.id.bar_fill);         
}

然而,当它到达最后一行时,它会崩溃。当我评论出来并做了

System.out.println(findViewById(R.id.bar_fill));

它返回了空值。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

在自定义适配器中覆盖此功能。

public View getView(int position, View convertView, ViewGroup parent);
View v = convertView;
    if (v == null) {
        LayoutInflater vi = (LayoutInflater) c
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(id, null);
    }

现在,如果你想从listview行项目中获得某些textview,那么就这样做:

TextView t1 = (TextView) v.findViewById(com.pis.prototype.R.id.TextView01);

t1现在是您需要的视图......:P

答案 1 :(得分:0)

如果您想在列表视图中获取已更新/创建的项目,并希望从某行获取某些视图。然后就这样做..:

    for (int i = 0; i < yourCustomAdapter.size(); i++) {

        View viewRow = listViewParts.getChildAt(i);

        CheckBox chkBox = (CheckBox) viewRow
                .findViewById(R.id.checkBox);
        yourCustomAdapter.get(i).attachmentCheck = chkBox
                .isChecked();
    }

在上面的例子中,我从列表视图中提取了复选框视图。