Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-将自定义视图添加到ListView_Java_Android_Xml_Layout - Fatal编程技术网

Java Android-将自定义视图添加到ListView

Java Android-将自定义视图添加到ListView,java,android,xml,layout,Java,Android,Xml,Layout,我有一个ListView,还有一个自定义视图PostView 如何创建一个新的PostView,并通过.addFooterView将其添加到ListView,但仍然能够访问PostView的对象表示形式 现在我正在尝试: // the footer p = new PostView( this ); p.setTargetUri( C.API_CONTENT ); p.setRenderMode( PostView.MODE_TEXT | PostView.MODE_IMAGE ); com

我有一个ListView,还有一个自定义视图PostView

如何创建一个新的PostView,并通过.addFooterView将其添加到ListView,但仍然能够访问PostView的对象表示形式

现在我正在尝试:

// the footer
p = new PostView( this );

p.setTargetUri( C.API_CONTENT );
p.setRenderMode( PostView.MODE_TEXT | PostView.MODE_IMAGE );

commentListView.addFooterView( p );
但当我试图访问本应膨胀的XML组件时,这是失败的

主要是:

public void setRenderMode( int renderMode )
{
  this.renderMode = renderMode;

  // fails
  this.postImagePreview = (ImageView)findViewById( R.id.new_post_image_preview );
}

我做错了吗?我定义了onFinishInflate,但可能是过早地访问了视图?

为什么不在成员变量中保留实例,而不是稍后调用findViewById?

您的setRenderMode是在PostView中还是使用PostView的活动

如果是在活动中,您应该做:

this.postImagePreview = (ImageView)p.findViewById( R.id.new_post_image_preview );

p是对您创建的PostView的引用。

我的解决方案是使用一个超级自定义列表适配器,该适配器能够返回不同类型的视图,并在生成的列表内容周围手动添加页眉和页脚视图。

我不确定是否遵循。此行:This.postmagepreview=imageviewfindviewbyd R.id.new\u post\u image\u preview;}在PostView.class内部调用和定义。所以,我不确定那个特定的XML什么时候可以访问,它在PostView中。您将看到,在我创建一个新的PostView之后,我调用'p.setRenderMode PostView.MODE_TEXT | PostView.MODE_IMAGE;,在我将其作为页脚附加到ListView之前。啊,是的,我明白了。看起来你试图过早地获得视图。不如改用oncreate方法。我认为有一种是用于查看对象的。