1

У меня есть пользовательский адаптер для списка, и у меня есть кнопка на этом.Как изменить текст кнопки при нажатии кнопки в пользовательском адаптере

поэтому я хочу изменить текст кнопки при нажатии кнопки для этого конкретного элемента в позиции.

<LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 

     > 

     <TextView 
      android:id="@+id/name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      /> 

    </LinearLayout> 

    <Button 
     android:id="@+id/btnadd" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="ADD"/> 

Мой заказ адаптер:

static class ViewHolder { 
    public TextView name; 
    public Button btnadd; 
} 

@Override 
public View getView(final int position, final View convertView, 
        ViewGroup parent) { 
    final ViewHolder holder; 
    View v = convertView; 

    if (v == null) { 
     final LayoutInflater vi = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.row_brandselected, null); 
     holder = new ViewHolder(); 

     holder.name = (TextView) v.findViewById(R.id.name); 


     holder.btnadd = (Button) v.findViewById(R.id.btnadd); 

     v.setTag(holder); 
    } else { 
     holder = (ViewHolder) v.getTag(); 
    } 

    UserName mUserNrand = values.get(position); 

    holder.name.setText(mUserBrand.getName().toString()); 



    holder.btnadd.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if(holder.btnadd.getText().toString() == "ADD"){ 

       holder.btnadd.setText("ADDED"); 
       notifyDataSetChanged(); 

      } 





     } 
    }); 

    return v; 
} 

Когда я нажать на кнопку текст кнопки не изменяя для этого конкретного элемента на этой позиции.

Как я могу изменить текст кнопки при нажатии кнопки для этого конкретного элемента в определенном положении?

+0

И если вы используете '((Button) v)' внутри вашего прослушивателя кликов вместо 'holder.btnadd'? Поскольку 'holder.btnadd' изменяется, но' v' является правильным представлением, когда вы находитесь внутри 'onClick'. –

+0

Я не получил его. можете ли вы подробнее объяснить? – deepak

+0

Добавил это как ответ. –

ответ

2

Я думаю, вы должны обновить свой OnClick следующим образом: Используйте сравнение .equals, иначе вы сравниваете объекты.

Использование Button btnadd = (Button)v; гарантирует, что вы используете отображаемое представление, это представление передается функции onClick как параметр и поэтому всегда то, что вы ожидаете.

holder.btnadd.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Button btnadd = (Button)v; 
     if(btnadd.getText().toString().equals("ADD")){ 
      btnfollow.setText("ADDED"); 
      notifyDataSetChanged(); 
     } 
    } 
}); 
+0

.equals или .equalsignoreCase? –

+0

Он работает отлично. Можете ли вы подробнее рассказать об использовании кнопки Button btnadd = (Button) v; '? – deepak

+1

Это зависит от того, что вы хотите, я думаю, что equals должны работать здесь, если вы не хотите, чтобы проверка была чувствительной к регистру, вы можете использовать equalsIgnoreCase. –

Смежные вопросы