繁体   English   中英

如何在扩展 Recyclerview 的适配器中获取意图

[英]How to getIntent in Adapter that extend Recyclerview

在我的 Login.class 中,我将意图 putextra 并将其传递给 FragmentHome,然后将其传递给 OrderGuru,然后将其传递给 AdapterCariGuru(这是问题来的时候) AdapterCariGuru class 扩展到 Recyclerview.Adapater,我想在 setonclick 上获取 Intent听众,我的 android 工作室版本是 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);
        }
    });

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

例子:

活动

  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());

暂无
暂无

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

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