android - 如何设置自定义 ListView 中的 ImageView setOnClickListner 并在单击 Imageview 时播放/暂停歌曲?

标签 android custom-lists

我是 android 的新手,我想在 ImageView 单击时播放和暂停歌曲。根据我的项目,我有一个自定义 ListView ,在这个 ListView 中我有两个 ImageView.因此,当用户选择播放时播放歌曲并选择暂停时暂停歌曲。

注意:- 基本上我想在我的 Activity 类中将 onClickListner 设置为自定义 ListView 适配器。我正在将 res\raw 文件夹中的歌曲添加到 arraylist .

这是我的适配器

public class SongAdapter extends BaseAdapter{

Context context;
private ArrayList<SongModel> songsListDat = null;
public ArrayList<SongModel> songsList;
private static LayoutInflater inflater;

public SongAdapter(Activity activity, ArrayList<SongModel> songsListDat) {

    this.context = activity;
    this.songsListDat = songsListDat;
    this.songsList = new ArrayList<SongModel>();
    this.songsList.addAll(songsListDat);
}
public void setSelectedIndex(int ind)
{
    notifyDataSetChanged();
}

@Override
public int getViewTypeCount() {

    return 1;
}

@Override
public int getCount() {
    return songsListDat.size();
}

@Override
public Object getItem(int position) {
    return songsListDat.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public int getItemViewType(int position) {

    return position;
}

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

    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View vi = convertView;
    if (convertView == null)
        vi = inflater.inflate(R.layout.ringtone_row_layout, null);

    TextView title = (TextView) vi.findViewById(R.id.name); // title
    ImageView play = (ImageView)vi.findViewById(R.id.imgPlayPause);
    ImageView pause = (ImageView)vi.findViewById(R.id.imgPause);


    SongModel song = new SongModel();
    song = songsListDat.get(position);
    title.setText(song.getSongTitle());

    return vi;
}
}

这是 Activity 类:-在这个 Activity 中,我想为播放和暂停功能设置 onclicklistner。

public class MainActivity extends ListActivity {

public static final String TAG = "[MainActivity]";

Activity activity;
SongAdapter songAdapter;
SongsManager songsManager = new SongsManager();
MediaPlayer mp;

// Songs list
public ArrayList<SongModel> songsList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    activity = MainActivity.this;


    mp = new MediaPlayer();


    SongsManager plm = new SongsManager(activity);
    final ArrayList<SongModel> songsListData = songsManager.songList;


    this.songsList = plm.getAllSongs();


    for (int i = 0; i < songsListData.size(); i++) {
        SongModel song = songsListData.get(i);
        songsListData.add(song);
    }


    songAdapter = new SongAdapter(this, songsList);
    setListAdapter(songAdapter);

    ListView lv = getListView();
}
}

这是我的歌曲模型类

public class SongModel {

private String songPath, songTitle;

public SongModel(String songPath, String songTitle) {
    this.songPath = songPath;
    this.songTitle = songTitle;
}

public SongModel() {

}

public void setSongPath(String songPath){
    this.songPath = songPath;
}

public String getSongPath() {

    return songPath;
}
public void setSongTitle(String songTitle){
    this.songTitle = songTitle;
}

public String getSongTitle() {

    return songTitle;
}

}

如果有人知道,请帮助我......

最佳答案

首先在你的适配器类中添加一个接口(interface),像这样使用它::

public class SongAdapter extends BaseAdapter {

    Context context;
    private ArrayList<SongModel> songsListDat = null;
    public ArrayList<SongModel> songsList;
    public OnMusicListener mListener;
    private static LayoutInflater inflater;

    public SongAdapter(Activity activity, ArrayList<SongModel> songsListDat, OnMusicListener mListener) {

        this.context = activity;
        this.mListener = mListener;
        this.songsListDat = songsListDat;
        this.songsList = new ArrayList<SongModel>();
        this.songsList.addAll(songsListDat);
    }

    public void setSelectedIndex(int ind) {
        notifyDataSetChanged();
    }

    @Override
    public int getViewTypeCount() {

        return 1;
    }

    @Override
    public int getCount() {
        return songsListDat.size();
    }

    @Override
    public Object getItem(int position) {
        return songsListDat.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemViewType(int position) {

        return position;
    }

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

        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View vi = convertView;
        if (convertView == null)
            vi = inflater.inflate(R.layout.ringtone_row_layout, null);

        TextView title = (TextView) vi.findViewById(R.id.name); // title
        ImageView play = (ImageView) vi.findViewById(R.id.imgPlayPause);
        ImageView pause = (ImageView) vi.findViewById(R.id.imgPause);


        SongModel song = new SongModel();
        song = songsListDat.get(position);
        title.setText(song.getSongTitle());

        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mListener.onPlayClicked(position);
            }
        });
        pause.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mListener.onPauseClicked(position);
            }
        });

        return vi;
    }

    public interface OnMusicListener {
        void onPauseClicked(int position);

        void onPlayClicked(int position);
    }
}

然后从你的 Activity 课上

songAdapter = new SongAdapter(this, songsList,this);
setListAdapter(songAdapter);

添加“this”后,您现在可以实现接口(interface)中的方法

从那里你可以有每次播放/暂停列表的点击事件..

请告知是否需要更多帮助..

所以这将是您的 Activity 应该像这样::

public class MainActivity extends ListActivity implements SongAdapter.OnMusicListener{

    public static final String TAG = "[MainActivity]";

    Activity activity;
    SongAdapter songAdapter;
    SongsManager songsManager = new SongsManager();
    MediaPlayer mp;

    // Songs list
    public ArrayList<SongModel> songsList = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        activity = MainActivity.this;


        mp = new MediaPlayer();


        SongsManager plm = new SongsManager(activity);
        final ArrayList<SongModel> songsListData = songsManager.songList;


        this.songsList = plm.getAllSongs();


        for (int i = 0; i < songsListData.size(); i++) {
            SongModel song = songsListData.get(i);
            songsListData.add(song);
        }


        songAdapter = new SongAdapter(this,songsList,this);
        setListAdapter(songAdapter);

        ListView lv = getListView();

    }

    @Override
    public void onPauseClicked(int position){

          //Todo-- Add code you want to perform on Pause clicked with   specific position

    }
    @Override
    public onPlayClicked(int position){
         //Todo-- Add code you want to perform on Play clicked with   specific position
    }
}

关于android - 如何设置自定义 ListView 中的 ImageView setOnClickListner 并在单击 Imageview 时播放/暂停歌曲?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41222472/

相关文章:

java - Android 中的计时器在延迟时无法正确重复

java - Canvas 上文本的持续时间

android - 如何像自定义 ListView 一样创建自定义 ImageView ?

android - 默认展开 CustomExpandable View 的第一项

android - 如何在自定义 ListView 中对单选按钮进行分组

android - 如何控制 ListView 重新加载。

Android:无论前一个滴答声尚未完成,计时器都会滴答作响吗?

android - 从 retrofit2 和 rxjava 中的错误中获取 url

Android: OnlongClickListener,检测何时停止

java - 如何使自定义 ListView 可点击