Android:Listview更改按钮文本在clilck上

时间:2016-06-07 22:20:52

标签: android listview

当我点击第一个按钮时,只点击一个按钮就可以设置按钮背景。但是当我向下滚动时发现问题发现更多的按钮随机改变,看起来像图片。

见图 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

1 个答案:

答案 0 :(得分: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");
}