在使用自定义适配器将列表项膨胀后查看列表视图并查找问题时。 我的问题是随机列表项视图按钮文本更改为“已添加”而不是显示文本“添加”,我已添加我的适配器代码 -
view = convertView;
if(view==null){
view = mLayoutInflater.inflate(R.layout.list_item, null);
mHolder = new ListHolder();
mHolder.mNameTV = (TextView) view.findViewById(R.id.user_full_name);
mHolder.mButton = (Button) view.findViewById(R.id.add);
view.setTag(mHolder);
}
else{
mHolder = (ListHolder) view.getTag();
}
mHolder.mNameTV.setText(myList.get(position).getName());
if(myList.get(position).isAdded()){
mHolder.mButton.setText("Added");
}
else{
mHolder.mButton.setText("Add");
}
return view;
在文本视图中显示正确的名称,但列表项中的按钮值不正确。
先谢谢。
答案 0 :(得分:1)
尝试不同的例子后,我找到了解决问题的方法。 我为它创建了两个不同的视图:1.user_added.xml和2. user_add.xml。 并在我的适配器检查条件内,然后像这样膨胀视图 -
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if(myList.get(position).isAdded())
return ADDED;
else
return NOTADDED;
}
和getView方法内部 -
int viewType = getItemViewType(position);
if(view==null){
mHolder = new ListHolder();
if(viewType==NOTADDED){
view = mLayoutInflater.inflate(R.layout.list_item_not_added, parent,false);
}
else{
view = mLayoutInflater.inflate(R.layout.list_item_added, parent,false);
}
mHolder.mNameTV = (TextView) view.findViewById(R.id.user_full_name);
mHolder.mButton = (Button) view.findViewById(R.id.add);
view.setTag(mHolder);
}
else{
mHolder = (ListHolder) view.getTag();
}
mHolder.mNameTV.setText(myList.get(position).getName());
mHolder.mButton.setTag(position);
mHolder.mButton.setOnClickListener(MyListener);
答案 1 :(得分:0)
if(myList.get(position).isAdded()){
这里确保您在解析数据时尚未设置true
。正如您使用上面的isAdded()
方法一样。看来,默认情况下,此方法的值返回true
,因此您的按钮文本始终显示为“已添加”。
答案 2 :(得分:0)
由于ListView的回收而发生这种情况,因此您应该存储视图并根据视图更改文本。
修改你的代码,
if(view==null){
view = mLayoutInflater.inflate(R.layout.list_item, null);
mHolder = new ListHolder();
mHolder.mNameTV = (TextView) view.findViewById(R.id.user_full_name);
mHolder.mButton = (Button) view.findViewById(R.id.add);
view.setTag(mHolder);
mHolder.mButton.setTag(position);
}
else{
mHolder = (ListHolder) view.getTag();
}
mHolder.mNameTV.setText(myList.get(position).getName());
int getPosition = (Integer)mHolder.mButton.getTag();
if(myList.get(getPosition).isAdded()){
mHolder.mButton.setText("Added");
}
else{
mHolder.mButton.setText("Add");
}