【发布时间】:2015-02-22 04:24:06
【问题描述】:
在活动的onCreate()方法中代码如下所示。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recording_list);
tplay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),"play",Toast.LENGTH_SHORT).show();
if(mp.isPlaying()){
tplay.setImageResource(android.R.drawable.ic_media_play);
mp.pause();
}else {
mp.start();
//Here i want to call method which is present in recycler view holder.The Method is stopAnimator() from my viewholder class
}
}
});
MyViewHolder 类在 MyAdapter 类中(MyViewHolder 是 MyAdapter 的内部类,MyAdapter 是活动的内部类)。适配器类代码如下:
private class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private final List<String> recordList;
public MyAdapter(List<String> recordList) {
this.recordList=recordList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemLayoutView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.song_item, null);
MyViewHolder myViewHolder= new MyViewHolder(itemLayoutView);
return myViewHolder;
}
@Override
public void onBindViewHolder(MyViewHolder viewHolder,int i) {
viewHolder.txtViewTitle.setText(recordList.get(i));
/***
* 2nd method to use the onclick listener on Recycler view
*/
/*viewHolder.txtViewTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),""+recordList.get(i),Toast.LENGTH_SHORT).show();
try {
mp.reset();
mp.setDataSource(SD_PATH + Recording.get(i));
mp.prepare();
mp.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});*/
}
@Override
public int getItemCount() {
return recordList.size();
}
class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
//If u have any other view like layout or button get refrence of that and implement the on click listener on that
public TextView txtViewTitle;
public EqualizerView equalizer;
public MyViewHolder(View itemView) {
super(itemView);
txtViewTitle = (TextView) itemView.findViewById(R.id.text1);
equalizer = (EqualizerView) itemView.findViewById(R.id.equalizer_view);
txtViewTitle.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),""+recordList.get(getPosition()),Toast.LENGTH_SHORT).show();
try {
mp.reset();
mp.setDataSource(SD_PATH + Recording.get(getPosition()));
mp.prepare();
mp.start();
if(mp.isPlaying()){
tplay.setImageResource(android.R.drawable.ic_media_pause);
equalizer.setVisibility(View.VISIBLE);
equalizer.animateBars(); // Whenever you want to tart the animation
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void stopAnimator() {
if (equalizer.isAnimating()){
equalizer.stopBars();
}
}
}
}
谁能帮帮我..!!!!!!。 我在 MyViewHolder 类中编写的方法是 stopAnimator(),如上面的代码所示。该方法用于停止均衡器。我想从 tplay onclickListener 的活动中调用此方法。我怎样才能实现这一点?均衡器是我从库 Mini Equalizer Library 中使用的自定义视图。
【问题讨论】:
-
可能在 onCreate 方法中创建
MyViewHolder类的对象?然后使用对象调用stopAnimator方法 -
它不工作。我的错误我忘了提到 ViewHolder 类是 MyAdapter 的内部类。编辑了问题。
标签: android oop android-5.0-lollipop android-recyclerview