首页 > 解决方案 > 如何在扩展 Recyclerview 的适配器中获取意图

问题描述

在我的 Login.class 中,我将意图 putextra 并将其传递给 FragmentHome,然后将其传递给 OrderGuru,然后将其传递给 AdapterCariGuru(这是问题来的时候) AdapterCariGuru 类扩展到 Recyclerview.Adapater,我想在 setonclick 上的这个适配器中获取 Intent听众,我的 android studio 版本是 3,5。投射到 Appcompactactivity 不起作用,初始化 Activity activity = new Activity() 并在 getIntent 上调用它也不起作用

@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {
    ((MyAdapterCariUstad)holder).nama.setText(modalCariGurus.get(position).getNama_guru());
    ((MyAdapterCariUstad)holder).keahlian.setText(modalCariGurus.get(position).getKeahlian());
    ((MyAdapterCariUstad)holder).biografi.setText(modalCariGurus.get(position).getBiografi());
    ((MyAdapterCariUstad)holder).rating.setText(modalCariGurus.get(position).getRating());
    ((MyAdapterCariUstad)holder).totalsantri.setText(modalCariGurus.get(position).getTotalsantri());
    ((MyAdapterCariUstad)holder).totalpertemuan.setText(modalCariGurus.get(position).getTotalpertemuan());
    ((MyAdapterCariUstad)holder).clickcari.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(context.getApplicationContext(), DetailGuru.class);
            intent.setFlags(intent.FLAG_ACTIVITY_NEW_TASK);
            try{ //Problem
                ((MyAdapterCariUstad) holder).email = ((AppCompatActivity) context).getIntent().getStringExtra("email");
                Log.d("emailadapater", ((MyAdapterCariUstad)holder).email + " ");
            }catch (Exception e){
                Toast.makeText(context, e + " ", Toast.LENGTH_SHORT).show();
                Log.d("emailadapater", ((MyAdapterCariUstad)holder).email + " ");
            }
            intent.putExtra("guru_Id", modalCariGurus.get(position).getGuru_id());
            intent.putExtra("mengajar_di", modalCariGurus.get(position).getMengajar_di());
            intent.putExtra("email", ((MyAdapterCariUstad) holder).email);
            intent.putExtra("pengalaman", modalCariGurus.get(position).getPengalaman());
            intent.putExtra("gambar_cari", modalCariGurus.get(position).getGambar_cari());
            intent.putExtra("nama_guru",modalCariGurus.get(position).getNama_guru());
            intent.putExtra("biografi_guru",modalCariGurus.get(position).getBiografi());
            context.startActivity(intent);
        }
    });

标签: javaandroidandroid-intentandroid-recyclerview

解决方案


我建议您在初始化适配器时将任何额外的参数作为参数传递给适配器。

例子:

活动

  public override fun onCreate(savedInstanceState: Bundle?) {

    ..other code..
    yourAdapter = AdapterCariUstad(modalCariGurus, this, getIntent().getStringExtra("email"))
    ....

  }

适配器

public class AdapterCariUstad extends RecyclerView.Adapter<RecyclerView.ViewHolder> {


  ArrayList<ModalCariGuru> modalCariGurus;

  Context context;

  View view;

  NameFilter filter;

  String email; // add this


  public AdapterCariUstad(ArrayList<ModalCariGuru> modalCariGurus, Context context, String email) {
    this.modalCariGurus = modalCariGurus;
    this.context = context;
    this.email = email;

  }


}

点击适配器

@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {

   ....Other code...
  ((MyAdapterCariUstad) holder).email = email;

  @Override  
  public void onClick(View view) {

        Intent intent = new Intent(context.getApplicationContext(), DetailGuru.class);
        intent.setFlags(intent.FLAG_ACTIVITY_NEW_TASK);

        intent.putExtra("guru_Id", modalCariGurus.get(position).getGuru_id());
        intent.putExtra("mengajar_di", modalCariGurus.get(position).getMengajar_di());

        intent.putExtra("email", email);

        intent.putExtra("pengalaman", modalCariGurus.get(position).getPengalaman());
        intent.putExtra("gambar_cari", modalCariGurus.get(position).getGambar_cari());
        intent.putExtra("nama_guru",modalCariGurus.get(position).getNama_guru());
        intent.putExtra("biografi_guru",modalCariGurus.get(position).getBiografi());
        context.startActivity(intent);
    }
}

另外,如果您的适配器不适合与不同的视图支架一起使用,我建议您执行类似的操作

例子:

class YourAdapter(val email : String) : RecyclerView.Adapter<YourViewHolder>() {

  ..remaining code...

}

所以你不需要像下面一样继续投射视图支架

 ((MyAdapterCariUstad)holder).nama.setText(modalCariGurus.get(position).getNama_guru());

推荐阅读