0

私のAndroidアプリケーションではListview、リストビューの各行にテキストビューと再生/一時停止ボタンがあります。ここでは、各リスト行に音声ファイルを表示しています。ユーザーが再生ボタンをクリックすると、音声ファイルが開始され、再生ボタンのアイコンが一時停止に変わります。同じボタンをもう一度クリックすると、その音声ファイルと一時停止のアイコンが停止しますボタンが再生になります。

問題は、1 行目の再生ボタンにアクセスしているときに、別の行の再生ボタンをクリックすると、1 行目のアイコンが変わることです。この機能を実現する方法がわかりません。この問題を解決するのを手伝ってください。

customAdapter の getView() メソッド:

  public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        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

                Toast.makeText(getContext(), v.getTag().toString(),
                        Toast.LENGTH_LONG).show();
                if (CustomListViewAdapter_ringtone.mp != null) {
                    if (CustomListViewAdapter_ringtone.mp.isPlaying()) {
                        CustomListViewAdapter_ringtone.mp.stop();
                        CustomListViewAdapter_ringtone.mp.release();
                    }
                }
                mp = MediaPlayer.create(getContext(),
                        Integer.parseInt(v.getTag().toString()));
                mp.start();
                v.setBackgroundResource(R.drawable.set_icon);
                btnId = Integer.parseInt(v.getTag().toString());
            }
        });
return convertView;
    }
4

4 に答える 4

1

OnListItemClick メソッドで最後にクリックされたボタンへの参照を保存するだけです。

public class Something {
    private CustomListItem previouslyClickedListItem;

    @Override
    public void onListItemClick(ListView listView, View view, int position, long id) {
        CustomListItem item = (CustomListItem) view;
        if (item != previouslyClickedListItem) {
            // Set previouslyClickedListItem to not clicked
            prevouslyClickedListItem = item;
            // Set item to clicked
        } else {
            // Set prevouslyClickListItem to not clicked
        }
    }
}
于 2013-08-06T09:54:53.173 に答える
0

以下はあなたの救いのためのコードスニペットです。たとえば、それに応じて変更できるようにトグルボタンを使用しました

public class CustomListviewAdapter extends BaseAdapter {

  private View PreviousView=null;

  public View getView(final int position, View convertView, final ViewGroup parent) {

  togglebutton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

        View CurrentView = v;
          if(PreviousView != null && PreviousView != CurrentView){
             ToggleButton tb=(ToggleButton)PreviousView.findViewById(R.id.togglebutton);
             tb.setChecked(false);
            }

          PreviousView=CurrentView;
         }
    });
  }
}
于 2015-07-05T18:20:25.520 に答える