2016-06-07 66 views
0

当我点击第一个按钮只点击一个按钮它设置按钮背景确定。但当我向下滚动时发现问题,我发现更多的按钮被随机地改变看起来像图片。Android:列表视图更改按钮文本上clilck

查看图片 here。代码

部分: - ContactSug_Adapter

public class ContactSug_Adapter extends ArrayAdapter { 

    List list = new ArrayList(); 
    ImageLoader imgLoader = new ImageLoader(getContext()); 
    private Context context; 
    public ContactSug_Adapter(Context context, int resource) { 
     super(context, resource); 
    } 

    @Override 
    public void add(Object object) { 
     super.add(object); 
     list.add(object); 
    } 

    @Override 
    public int getCount() { 
     return super.getCount(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return this.list.get(position); 
    } 


    @Override 
    public View getView(final int position, View convertView, final ViewGroup parent) { 
     View row; 
     row = convertView; 
     final ContactHolder contactHolder; 
     if (row == null) { 
      LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = layoutInflater.inflate(R.layout.row, parent, false); 
      contactHolder = new ContactHolder(); 
      contactHolder.tx_id = (TextView) row.findViewById(R.id.usersName2); 
      contactHolder.tx_name = (TextView) row.findViewById(R.id.usersName); 
      contactHolder.sug_add = (Button) row.findViewById(R.id.sug_id); 

      row.setTag(contactHolder); 


     } else { 
      contactHolder = (ContactHolder) row.getTag(); 

     } 
     final Contacts_Sug contacts = (Contacts_Sug) this.getItem(position); 
     contactHolder.image_tx.setImageResource(R.mipmap.ic_launcher); 
     contactHolder.tx_id.setText(contacts.getId()); 
     contactHolder.tx_name.setText(contacts.getName()); 
     contactHolder.sug_add.setTag(position); 

     contactHolder.sug_add.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       contactHolder.sug_add.setText("Selected"); 

      } 
     }); 


     return row; 
    } 


    public class ContactHolder { 
     TextView tx_id, tx_name,loadId; 
     ImageView image_tx; 
     public Button sug_add; 

    }/********* act 
+0

列表视图,回收他们的意见,有时当你向下滚动,在'row'不会是空的,因为它是被重用。在这种情况下,您正在使用'contactHolder =(ContactHolder)row.getTag();'''''我会使用'position'参数来跟踪状态的旧视图中的'contactHolder' – TychoTheTaco

回答

1

这是由于意见回收。 您需要为要设置的项目设置文本“选定”,并设置其他项目的默认文本。你可以用if-else语句来做到这一点。

对于您需要有一个成员变量在Contacts_Sug举行这样的selectionPos -

private int selectionPos; 

public void setSelectedPosition(int position){ 
    selectionPos = position; 
} 

public int getSelectedPosition(){ 
    return selectionPos; 
} 

,并设置按钮onClick() -

contactHolder.sug_add.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       contacts.setSelectedPosition(position); //Set position here 
       contactHolder.sug_add.setText("Selected"); 

      } 
     }); 

onClick()你在哪里之外为您的视图设置值。 添加此 -

if(contacts.getSelectedPosition() == position){ 
     //Set your button state to "selected" here 
     contactHolder.sug_add.setText("Selected"); 
} else{ 
     //Set your button state to default here 
     contactHolder.sug_add.setText("Follow"); 
}