如何从 recyclerView 接收 JSON 数据到另一个 activity
How to receive JSON data from recyclerView to another activity
我正在制作一个音乐播放器应用程序。歌曲取自 JSON url 和
我有一个 recyclerView 来显示数据。现在点击 recyclerView 另一个音乐播放器 activity 启动并开始播放歌曲。这是问题所在,点击 recyclerview 只会将点击的索引数据传递给另一个 activity。现在我想播放音乐播放器 activity 中的下一首歌曲。
我怎样才能做到这一点 ?我正在使用改造和 rxjava 来获取数据。
这是回收视图:
@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;
}
}
根据我的经验,我能想出 RecyclerView 的最佳方法是提取视图的点击侦听器(activities/fragment 或 ...)。
我认为在您的场景中,在 activity 中实现侦听器也是一种很好的做法。
因此,请在您的 activity 中保留对您的音乐对象的引用,然后当点击发生时,只需将列表与所选音乐的索引一起传递给另一个 activity。
这里是它可能的样子的概述:
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;
}
希望对您有所帮助
尝试使用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);
谢谢。
尝试使用 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
使用Gson将json数据转成字符串
示例。
intent.putExtra("data", new Gson().toJson(你的json对象).
并在 activity 收到它喜欢
Data = new Gson().fromJson(getIntent.getStringExtra("data"), YourModel.class);
试试吧:
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");
我正在制作一个音乐播放器应用程序。歌曲取自 JSON url 和 我有一个 recyclerView 来显示数据。现在点击 recyclerView 另一个音乐播放器 activity 启动并开始播放歌曲。这是问题所在,点击 recyclerview 只会将点击的索引数据传递给另一个 activity。现在我想播放音乐播放器 activity 中的下一首歌曲。 我怎样才能做到这一点 ?我正在使用改造和 rxjava 来获取数据。
这是回收视图:
@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;
}
}
根据我的经验,我能想出 RecyclerView 的最佳方法是提取视图的点击侦听器(activities/fragment 或 ...)。
我认为在您的场景中,在 activity 中实现侦听器也是一种很好的做法。
因此,请在您的 activity 中保留对您的音乐对象的引用,然后当点击发生时,只需将列表与所选音乐的索引一起传递给另一个 activity。
这里是它可能的样子的概述:
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;
}
希望对您有所帮助
尝试使用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);
谢谢。
尝试使用 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
使用Gson将json数据转成字符串
示例。
intent.putExtra("data", new Gson().toJson(你的json对象).
并在 activity 收到它喜欢
Data = new Gson().fromJson(getIntent.getStringExtra("data"), YourModel.class);
试试吧:
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");