0

В моем приложении для Android я использую Listview, у которого будет кнопка и текстовое изображение. Здесь я меняю значок кнопки при нажатии кнопки. Я использовал customAdapter для listview. Функциональность изменения значка кнопки работает отлично.Идентификатор кнопки ListView изменен на прокрутке списка Android Android

Проблема в том, что когда я просматриваю свой список, значок другой кнопки также изменяется. Я не знаю, в чем проблема с моим кодом. Пожалуйста, помогите мне решить эту проблему.

customAdapter:

общественного класс CustomListViewAdapter_ringtone расширяет ArrayAdapter {

Context context; 
public static MediaPlayer mp = null; 
int btnId; 
String rowTag; 
View previouView = null; 
ListView mListView; 

public CustomListViewAdapter_ringtone(Context context, int resourceId, 
     List<RowItem_ringtone> items, ListView lst) { 
    super(context, resourceId, items); 
    this.context = context; 
    this.mListView = lst; 
} 

private class ViewHolder { 
    TextView txtTitle; 
    ImageButton btnPlay; 
    ImageButton btnSet; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder = null; 
    final RowItem_ringtone rowItem = getItem(position); 

    LayoutInflater mInflater = (LayoutInflater) context 
      .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.ringtone_row, null); 
     holder = new ViewHolder(); 

     holder.txtTitle = (TextView) convertView 
       .findViewById(R.id.ringtoneTitle); 
     holder.btnPlay = (ImageButton) convertView 
       .findViewById(R.id.btnPlay); 
     holder.btnSet = (ImageButton) convertView.findViewById(R.id.btnSet); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.txtTitle.setText(rowItem.getRingTitle()); 
    holder.btnPlay.setTag(rowItem.getRingId()); 
    holder.btnSet.setTag(rowItem.getRingId()); 

    holder.btnPlay.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      if (CustomListViewAdapter_ringtone.mp != null) { 
       if (CustomListViewAdapter_ringtone.mp.isPlaying()) { 
        CustomListViewAdapter_ringtone.mp.stop(); 
        CustomListViewAdapter_ringtone.mp.release(); 
        CustomListViewAdapter_ringtone.mp = null; 
       } 
      } 
      if (previouView != null) { 
       if (previouView != v) { 

        previouView.setBackgroundResource(R.drawable.play_icon); 
        v.setBackgroundResource(R.drawable.pause_icon); 
        CustomListViewAdapter_ringtone.mp = MediaPlayer.create(
          getContext(), 
          Integer.parseInt(v.getTag().toString())); 
        CustomListViewAdapter_ringtone.mp.start(); 
        previouView = v; 
       } else { 
        previouView.setBackgroundResource(R.drawable.play_icon); 
        previouView = null; 
       } 
      } else { 
       CustomListViewAdapter_ringtone.mp = MediaPlayer.create(
         getContext(), 
         Integer.parseInt(v.getTag().toString())); 
       CustomListViewAdapter_ringtone.mp.start(); 
       v.setBackgroundResource(R.drawable.pause_icon); 
       previouView = v; 
      } 
     } 
    }); 

    holder.btnSet.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      String name = rowItem.getRingTitle(); 
      name = "one_direction_" + name.toLowerCase().replace(" ", "_"); 

      Uri path = Uri.parse("android.resource://" 
        + getContext().getPackageName() + "/raw/" + name); 

      RingtoneManager.setActualDefaultRingtoneUri(getContext(), 
        RingtoneManager.TYPE_RINGTONE, path); 

      RingtoneManager.getRingtone(getContext(), path).play(); 
      Toast.makeText(getContext(), name + " is set as ringtone.", 
        Toast.LENGTH_LONG); 
     } 
    }); 
    return convertView; 
} 

}

+0

где вы определяете previouView? –

+0

Я определяю 'previousView' вне' getView() 'метода и внутри моего класса. – zanky

+0

@zanky включают ** previousview ** в зрителя. – Yugesh

ответ

0

Настроенного представление списка, как показано ниже изображений, но с кнопкой, если нажать кнопку изменения выбранной строки изображения а также измените значок кнопки paly.

enter image description here

+0

Как это сделать? может предложить изменить мой код? – zanky

+0

@zanky, моя догадка верна или нет. – Yugesh

+0

Да, ваша догадка правильная, но я не понимаю, где я должен внести изменения в свой код. – zanky

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