这里简要说明了我的getView。我的目的并不是强调视图持有人模式,这就是为什么我为什么这个例子不起作用而感到慌乱的原因。我正在研究这个例子来说明为什么视图持有者模式是有用的,以及getViewTypeCount()等。有什么想法吗?
public View getView(int position, View convertView, ViewGroup parent) {
View v = null;
if (userPic != null) {
if (v == null) {
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.item_1, null);
}
TextView prime = (TextView) v
.findViewById(R.id.prime);
prime.setText("test");
ImageView img = (ImageView) v
.findViewById(R.id.my_image);
//NPE happens here
img.setVisibility(View.GONE);
return v;
} else {
if (v == null) {
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.item_2, null);
}
TextView prime = (TextView) v
.findViewById(R.id.prime);
prime.setText("test 2");
Button button = (Button) v
.findViewById(R.id.my_button);
//NPE happens here
button.setVisibility(View.GONE);
return v;
}
}
在我获得NPE的两个地方寻找//NPE happens here
。即使我不应该得到一个,因为View v总是被设置。我有两个单独的xml布局,但它们只有一个有ImageView而另一个有按钮。我试过删除我的gen并清理我的项目。
答案 0 :(得分:0)
v = inflater.inflate(R.layout.list_item_apps, parent,false)
将此表单与false
一起使用非常重要。
答案 1 :(得分:0)
尝试将您的主要文本视图和按钮保留在您执行视图通胀的if和else块中。
答案 2 :(得分:0)
取代......
View v;
用于代码中的每个位置
convertView
getView();
参数中的变量...谢谢