我正在制作音乐播放器应用。歌曲是从JSON网址中获取的, 我有一个recyclerView来显示数据。现在,单击“回收站”,将启动另一个音乐播放器活动,并开始播放歌曲。这是问题所在,单击recyclerview只会将单击的索引数据传递给另一个活动。现在,我想播放音乐播放器活动中的下一首歌曲。 我怎样才能做到这一点 ?我正在使用翻新和rxjava来获取数据。
这是recyclerView:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Context context = view.getContext();
Intent intent = new Intent(context , MusicPlayerActivity.class);
intent.putExtra(Intent.EXTRA_TEXT , mAndroidList.get(position).getDesc());
intent.putExtra("url", mAndroidList.get(position).getAudio());
context.startActivity(intent);
((Activity) context).overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
}
});
App.java
public class App implements Serializable {
@SerializedName("itemId")
@Expose
private String itemId;
@SerializedName("desc")
@Expose
private String desc;
@SerializedName("audio")
@Expose
private String audio;
public App(String itemId, String desc, String audio) {
this.itemId = itemId;
this.desc = desc;
this.audio = audio;
}
public String getId() {
return itemId;
}
public String getDesc() {
return desc;
}
public String getAudio() {
return audio;
}
}
答案 0 :(得分:2)
尝试一下:
Intent intent = new Intent(context , MusicPlayerActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("value", mAndroidList);
intent.putExtras(bundle)
和
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
List<App> thumbs=(List< App >)bundle.getSerializable("value");
答案 1 :(得分:1)
尝试使用Bundle通过
Context context = view.getContext();
Intent intent = new Intent(context , MusicPlayerActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable(Intent.EXTRA_TEXT, mAndroidList);
bundle.putInt("POSITION", position);
intent.putExtras(bundle);
context.startActivity(intent);
((Activity) context).overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
在MusicPlayerActivity.class
中,使用以下代码获取数据,
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
int position = bundle.getInt("POSITION");
List<App> list = (List<App>)bundle.getSerializable(Intent.EXTRA_TEXT);
谢谢。
答案 2 :(得分:0)
根据我的经验,我想出RecyclerView的最好方法是将点击侦听器提取到视图(活动/片段或...)。
我认为在您的情况下,在活动中实现侦听器也是一个好习惯。
因此请在活动中保留对音乐对象的引用,然后在单击时将列表与所选音乐的索引一起传递到另一个活动。
下面是它的外观概述:
public class ListActivity extends AppCompatActivity{
ArrayList<App> musicList;
RecyclerView recyclerView;
Adapter adapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
musicList = getMusics();
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new Adapter(musicList);
adapter.setListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int index =(int) v.getTag();
Intent intent = new Intent(ListActivity.this , MusicPlayerActivity.class);
intent.putExtra("index" , index);
intent.putExtra("music_list", musicList);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
}
});
recyclerView.setAdapter(adapter);
}
}
和适配器:
public static class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
private View.OnClickListener listener;
public Adapter(List<App> musics) {
this.musics = musics;
}
private List<App> musics;
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//create your view holder here
return null;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
//bind the view
// .
// .
//remember to store the index to be able to retrieve it later
holder.itemView.setTag(position);
holder.itemView.setOnClickListener(listener);
}
@Override
public int getItemCount() {
return musics.size();
}
public void setListener(View.OnClickListener listener) {
this.listener = listener;
}
希望有帮助
答案 3 :(得分:0)
尝试使用Bundle.Serializable传递可序列化列表
Intent intent = new Intent(context , MusicPlayerActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("value", mAndroidList);
intent.putExtras(bundle)
您可以通过以下方式获得它:
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
List<App> thumbs=(List< App >)bundle.getSerializable("value");
如果您可以获得详细信息,请阅读 Builde
答案 4 :(得分:0)
使用Gson将json数据转换为字符串
示例。
intent.putExtra(“ data”,新的Gson()。toJson(您的json对象)。
在活动中像
Data = new Gson()。fromJson(getIntent.getStringExtra(“ data”),YourModel.class);