2016-12-19 14 views
1

Я новичок в андроиде, и я хочу играть и приостанавливать песню, когда ImageView нажал. В соответствии с моим проектом у меня есть один пользовательский список и в этом списке есть два ImageView. Так, когда пользователь выбирает игру в это время, воспроизводите песню и выберите паузу в это время, приостановите песню.Как установить ImageView setOnClickListner, который находится в пользовательском списке воспроизведения и воспроизведении/паузе песни при щелчке изображения?

Примечание: - В основном я хочу, чтобы установить, что onClickListner в моем классе активности не пользовательский ListView adapter.And я добавил, что песни из 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; 
} 
} 

Это класс деятельности: - В этом упражнении я хочу установить 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; 
} 

} 

Если кто-нибудь знает, пожалуйста, помогите мне ...

ответ

2

Первый Добавление интерфейса в классе адаптера, как & использовать его как этот ::

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); 
    } 
} 

Тогда из вашего класс деятельности

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

После "this " добавил теперь вы можете реализует метод из интерфейса

от что вы можете иметь событие щелчка каждой игры/пауза списка ..

Пожалуйста скажите, если требуется дополнительная помощь ..

Так что это будет ваша деятельность должна нравится ::

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 
    } 
} 
+0

я попробую ..... –

+0

Смотрите мои изменения в деятельности, я получаю NullPointer в OnMouseListner и скажите мне, где я не прав в этом https://gist.github.com/anonymous/43e3700bc0292623cf71208a41eeae61 –

+0

Пожалуйста, проверьте редактировать код ... Я добавил код активности тоже. –

0

Пожалуйста, попробуйте это, когда вы хотите установить СРК изображение из ListView элемент что-то еще, когда элемент ListView используется.

view Используйте параметр onItemClick способ изменения 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);     
    } 
0

Вы можете просто передать OnClick слушателю адаптер и установить кнопку слушателя к представлению изображения.

И когда вы устанавливаете свой адаптер из своей деятельности, просто создавайте новый прослушиватель кликов при передаче параметров в свои методы.