繁体   English   中英

如何将原始 mp3 从 recyclerview 项目传递到另一个活动

[英]How to pass raw mp3 from recyclerview item to another activity

在我的 Android 应用程序中,我有一个包含项目列表的 recyclerview。 在 recyclerview 活动中,每个项目都有一个 textview,另一个活动有两个 textview 和一个音频播放按钮。 但音频没有播放。 如何设置 setOnClickListener 并使用 MediaPlayer 播放音频 mp3。 这是我的代码-

名称模型.java


public class NameModel {

    private String name,meaning;
    private int audio;

    public NameModel(String name, String meaning, int audio) {

        this.name= name;
        this.meaning= meaning;
        this.audio= audio;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name= name;
    }

    public String getMeaning() {
        return meaning;
    }

    public void setMeaning(String meaning) {
        this.meaning= meaning;
    }

    public int getAudio() {
        return audio;
    }

    public void setAudio(int audio) {
        this.audio = audio;
    }
}

名称适配器.java


itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int position=getAdapterPosition();
                    NameModel nameModel=nameItemList.get(position);

                    Intent intent=new Intent(context, NameDetailsActivity.class);
                    intent.putExtra("NAME",nameModel.getName());
                    intent.putExtra("MEANING",nameModel.getMeaning());
                    intent.putExtra("AUDIO", nameModel.getAudio());
                    context.startActivity(intent);
                }
            });

主活动.java


public class MainActivity extends AppCompatActivity {

    private LinearLayoutManager linearLayoutManager;
    private List<NameModel> nameModelList;
    private NameAdapter nameAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView recyclerView  = (RecyclerView) findViewById(R.id.recyclerViewId);
        nameModelList = new ArrayList<>();
        nameAdapter = new NameAdapter(this,nameModelList);

        linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setAdapter(nameAdapter);
        recyclerView.setLayoutManager(linearLayoutManager);

        RecyclerView.ItemDecoration itemDecoration=new DividerItemDecoration(getApplicationContext(),DividerItemDecoration.VERTICAL);
        recyclerView.addItemDecoration(itemDecoration);

        nameModelList.add(new NameModel("Mahmud", "The praised one", R.raw.mahmud));
        nameModelList.add(new NameModel("Maaz", "Brave Man", R.raw.maaz));
    }
}

名称详细信息Activity.java


public class NameDetailsActivity extends AppCompatActivity {

    Context context;
    NameModel nameModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_details_name);

        String name = getIntent().getStringExtra("NAME");
        String meaning = getIntent().getStringExtra("MEANING");
        int audio = getIntent().getIntExtra("AUDIO",0);

        TextView nameText = (TextView) findViewById(R.id.tvName);
        TextView meaningText = (TextView) findViewById(R.id.tvMeaning);
        Button playbutton = (Button) findViewById(R.id.playBtn);

        nameText.setText(name);
        meaningText.setText(meaning);

        playbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MediaPlayer mediaPlayer = MediaPlayer.create(context,audio);
                mediaPlayer.start();
            }

        });
    }
}

任何帮助,将不胜感激。 谢谢!

首先你在做getIntent().getStringExtra("AUDIO"); 在这种情况下这是不对的。 你在你的intent.putExtra("AUDIO", nameModel.getAudio());设置了 int 值intent.putExtra("AUDIO", nameModel.getAudio()); 所以你必须使用int audio = getIntent().getIntExtra("AUDIO");取回 int 值int audio = getIntent().getIntExtra("AUDIO"); . 希望它会帮助你。

另外我注意到一件事。 在您的 NameDetailsActivity 中,您在哪里初始化您的上下文和您的 NameModel 类? 其实我不知道为什么你需要NameModelNameDetailsActivity ,但无论如何...如果你将通过这方面给媒体播放器不用初始化,您将获得NullPointerException异常。 你会得到类似Caused by java.lang.NullPointerException Attempt to invoke virtual method 'int com.tahmid.name.models.NameModel.getAudioFile()'异常。 这是因为你的NameModelNameDetailsActivity为空。

你必须做两件事。 如果您需要NameModelNameDetailsActivity ,你必须创建一个空的构造NameModel类。 你可以在我下面的回答中找到它。 并且您必须在NameDetailsActivity初始化 context 和NameDetailsActivity

所以试试这个代码。

首先在你的NameModel创建一个空的构造函数。

public class NameModel {

private String name,meaning;
private int audio;

public NameModel() {}

public NameModel(String name, String meaning, int audio) {

    this.name= name;
    this.meaning= meaning;
    this.audio= audio;
}

// The same code...

而你的NameDetailsActivity你可以做到这一点。

public class NameDetailsActivity extends AppCompatActivity {

Context context;
NameModel nameModel;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_details_name);

    context = getContext();
    nameModel = new NameModel();

    String name = getIntent().getStringExtra("NAME");
    String meaning = getIntent().getStringExtra("MEANING");
    int audio = getIntent().getIntExtra("AUDIO",0);

    TextView nameText = (TextView) findViewById(R.id.tvName);
    TextView meaningText = (TextView) findViewById(R.id.tvMeaning);
    Button playbutton = (Button) findViewById(R.id.playBtn);

    nameText.setText(name);
    meaningText.setText(meaning);

    playbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            MediaPlayer mediaPlayer = MediaPlayer.create(context,audio);
            mediaPlayer.start();
        }

    });
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM