在列表视图中,在前一个浏览器膨胀后无法找到Viewstub

时间:2013-11-05 21:52:29

标签: android listview layout-inflater viewstub

我正在使用一些列表项布局,在项目布局中,有一个Viewstub,我想在其中放入一些图像。我没有列表项布局的来源,只知道有一些TextViews和ViewStubs in它

我的目的是首先找到ViewStub并设置我的个人布局并使用它。但是,找不到某些ViewStub。

public class TJAdapter extends CursorAdapter {
    ....
    public void bindView(View view, Context context, Cursor cursor) {
        View item = view;
        ViewStub contentstub = (ViewStub)item.findViewById(R.id.content_stub);

        if (contentstub == null){
            LOG.error("TJ,contentstub is null");
        } else  {
            LOG.error("TJ,contentstub is not null");
            contentstub.setLayoutResource(R.layout.icon_image);
            View iconImage = contentstub.inflate();
        }
        ....
    }

    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        final View view = mInflater.inflate(R.layout.list_item, parent, false);
        bindView(view, context, cursor);
    }
}

日志输出如下:

 TJ,bindView is called
 TJ,contentstub is not null
 TJ,bindView is called
 TJ,contentstub is null
 TJ,bindView is called
 TJ,contentstub is not null
 TJ,bindView is called
 TJ,contentstub is not null
 TJ,bindView is called
 TJ,contentstub is null
 TJ,bindView is called
 TJ,contentstub is not null

我花了很多时间在上面,并且不知道为什么会这样。

有人可以帮忙吗?

=============================================== ==================

正如blahdiblah建议的,现在我可以找到iconImage。但我不太明白为什么下一个项目会受到影响,我不能再按下列表项了。它没有回应。

ImageButton iconImage = null;
ViewStub contentstub = (ViewStub)item.findViewById(R.id.content_stub);
if (contentstub == null){
    LOG.error("TJ,contentstub is null");
    iconImage = (ImageButton)item.findViewById(R.id.icon_image);
} else  {
    LOG.error("TJ,contentstub is not null");
    contentstub.setLayoutResource(R.layout.list_item_icon_image);
    View image = contentstub.inflate();
    iconImage = (ImageButton)image.findViewById(R.id.icon_image);

}

if (iconImage == null) {
    LOG.error("TJ,iconImage is null");
} else {
    LOG.error("TJ, iconImage is not null");
}

1 个答案:

答案 0 :(得分:0)

当您致电contentstub.inflate();时,ViewStub的内容会被替换为 ,包括其ID 。当视图在另一次调用bindView时被回收时,搜索R.id.content_stub将失败,因为ViewStub已被R.layout.icon_image替换。

如果layout/icon_image.xml的搜索未显示任何内容,解决方法是查找您在R.id.content_stub中设置的ID。

此外,对于它的价值,您不必手动拨打bindView中的newView。这应该自动处理。