Android列表查看项重复

时间:2014-01-07 07:44:37

标签: android listview baseadapter

在使用自定义适配器将列表项膨胀后查看列表视图并查找问题时。 我的问题是随机列表项视图按钮文本更改为“已添加”而不是显示文本“添加”,我已添加我的适配器代码 -

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;

在文本视图中显示正确的名称,但列表项中的按钮值不正确。

先谢谢。

3 个答案:

答案 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");
 }