如何从recyclerView接收JSON数据到另一个活动

时间:2018-07-22 04:12:13

标签: android json android-recyclerview rx-java audio-player android-music-player

我正在制作音乐播放器应用。歌曲是从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;
}

}

5 个答案:

答案 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);