Android 如何设置自定义listview中的ImageView设置ClickListner,并在单击ImageView时播放/暂停歌曲?

Android 如何设置自定义listview中的ImageView设置ClickListner,并在单击ImageView时播放/暂停歌曲?,android,custom-lists,Android,Custom Lists,我是android新手,我想在点击ImageView时播放和暂停歌曲。根据我的项目,我有一个自定义列表视图,在这个列表视图中,我有两个ImageView。因此,当用户选择播放时播放歌曲,然后选择暂停时暂停歌曲 注意:-基本上,我想将活动类中的onClickListner设置为非自定义listview适配器。我正在将res\raw文件夹中的歌曲添加到arraylist中 这是我的适配器 public class SongAdapter extends BaseAdapter{ Context c

我是android新手,我想在点击
ImageView
时播放和暂停歌曲。根据我的项目,我有一个自定义列表视图,在这个列表视图中,我有两个
ImageView
。因此,当用户选择播放时播放歌曲,然后选择暂停时暂停歌曲

注意:-基本上,我想将活动类中的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;
}
}

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

点击ListView项目时,如果要将图像src从ListView项目设置为其他项目,请尝试此操作

使用
onItemClick
方法的
view
参数更改所选行的
ImageView

@Override
  public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
   ImageView selectedImage = (ImageView) view.findViewById(R.id.buckysImage);    
   selectedImage.setImageResource(R.drawable.selected);                 
   }
@覆盖
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
ImageView选择图像=(ImageView)view.findViewById(R.id.buckysImage);
选择edimage.setImageResource(R.drawable.selected);
}

首先在适配器类中添加一个接口,如下所示并使用它:

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);
    }
}
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
    }
}
添加
“this”
后,现在可以从接口实现该方法

从中,您可以获得列表中每次播放/暂停的单击事件

如果需要更多帮助,请告诉我

因此,这将是您的活动,应该如下所示:

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);
    }
}
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
    }
}
公共类MainActivity扩展ListActivity实现SongAdapter.OnMusicListener{
公共静态最终字符串标记=“[MainActivity]”;
活动;
歌曲适配器;
SongsManager SongsManager=new SongsManager();
MediaPlayer mp;
//歌曲列表
public ArrayList songsList=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
activity=MainActivity.this;
mp=新媒体播放器();
SongsManager plm=新的SongsManager(活动);
最终ArrayList songsListData=songsManager.songList;
this.songsList=plm.getAllSongs();
对于(int i=0;i
您只需将onclick listener传递给适配器,然后将click listener设置为图像视图


当您从活动中设置适配器时,只需在将参数传递到方法中时创建新的单击侦听器。

查看我对活动的更改,我在OnMouseListner中获取nullpointer,并告诉我在这方面的错误,请检查编辑代码…我也添加了活动代码。非常好…您节省了我的时间…谢谢
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
    }
}