我是 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/