【问题标题】:How to implement multiple buttons on Onitemclicklistener function interface? [closed]Onitemclicklistener功能界面如何实现多个按钮? [关闭]
【发布时间】:2018-04-09 12:55:29
【问题描述】:

我这里不明白如何使用这个接口OnItemClickListener 来控制多个按钮

package com.mtechviral.musicplayer;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import java.util.ArrayList;

public class SongAdapter extends RecyclerView.Adapter<SongAdapter.SongHolder> {

    private ArrayList<SongInfo> _songs = new ArrayList<SongInfo>();
    private Context context;
    private OnItemClickListener mOnItemClickListener;

    public SongAdapter(Context context, ArrayList<SongInfo> songs) {
        this.context = context;
        this._songs = songs;
    }

    //getting a error
    public interface OnItemClickListener {
        void onItemClick(Button b ,View view, SongInfo obj, int position);
        //add another button parameter
    }

    public interface OnItemClickListener {
        void onItemClick(Button bt ,View view, SongInfo obj, int position);
        //add another button parameter
    }

    public void setOnItemClickListener(final OnItemClickListener mItemClickListener) {
        this.mOnItemClickListener = mItemClickListener;
    }

    @Override
    public SongHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View myView = LayoutInflater.from(context).inflate(R.layout.row_songs,viewGroup,false);
        return new SongHolder(myView);
    }

    @Override
    public void onBindViewHolder(final SongHolder songHolder, final int i) {
            final SongInfo s = _songs.get(i);
            songHolder.tvSongName.setText(_songs.get(i).getSongname());
            songHolder.tvSongArtist.setText(_songs.get(i).getArtistname());
            songHolder.btnAction.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (mOnItemClickListener != null) {
                        mOnItemClickListener.onItemClick(songHolder.btnAction,v, s, i);
                    }
                }
            });
        songHolder.btnStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mOnItemClickListener != null) {
                    mOnItemClickListener.onItemClick(songHolder.btnStop,v, s, i);
                }
            }
        });

        //write a function for pause
    }

    @Override
    public int getItemCount() {
        return _songs.size();
    }

    public class SongHolder extends RecyclerView.ViewHolder {
        TextView tvSongName,tvSongArtist;
        Button btnAction,btnStop;

        //declare a new button............................................
        public SongHolder(View itemView) {
            super(itemView);
            tvSongName = (TextView) itemView.findViewById(R.id.tvSongName);
            tvSongArtist = (TextView) itemView.findViewById(R.id.tvArtistName);
            btnAction = (Button) itemView.findViewById(R.id.btnAction);
            btnStop = (Button) itemView.findViewById(R.id.btnStop);
            //declaraion details
            //....................................................
        }
    }
}

【问题讨论】:

  • 不要为了满足要求而一遍遍地复制/粘贴同一个句子。相反,更详细地解释问题并仅显示相关代码。并且当你发布相关代码时,首先格式化它以删除所有不必要的空格。
  • 在跳到这里之前先做一个研究

标签: java android android-studio button android-music-player


【解决方案1】:

您不需要定义多个接口来处理多个按钮。您可以只使用一种方法,也可以在侦听器界面中添加另一种方法来处理这两种点击。在我看来,您应该添加另一种方法来分离处理。像这样的:

public class SongAdapter extends RecyclerView.Adapter<SongAdapter.SongHolder> {

  ...

  public interface OnItemClickListener {
    // Only use 2 parameters because you just need them.
    void onActionClicked(SongInfo obj, int position);
    void onStopClicked(SongInfo obj, int position);
  }

  public void setOnItemClickListener(final OnItemClickListener mItemClickListener) {
    this.mOnItemClickListener = mItemClickListener;
  }

  ...

  @Override
  public void onBindViewHolder(final SongHolder songHolder, final int i) {
    ...

    songHolder.btnAction.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        if (mOnItemClickListener != null) {
          mOnItemClickListener.onActionClicked(s, i);
        }
      }
    });

    songHolder.btnStop.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        if (mOnItemClickListener != null) {
          mOnItemClickListener.onStopClicked(s, i);
        }
      }
    });

    //write a function for pause
  }

  ...

}

【讨论】:

  • 请详细说明一下
  • 请详细说明一下
  • but i hv to capture tet written on button and the give its function accordingly 我无法理解您的意图。你想用这个按钮做什么?
  • 谢谢你.....我明白了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多