简体   繁体   English

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

[英]How to getIntent in Adapter that extend Recyclerview

in my Login.class i put intent putextra and pass it into FragmentHome then pass it into OrderGuru then pass it into AdapterCariGuru(THis is when the problem come) AdapterCariGuru class is extend to Recyclerview.Adapater and i want to getIntent in this adapter on setonclick listener, my android studio versionis 3,5.在我的 Login.class 中,我将意图 putextra 并将其传递给 FragmentHome,然后将其传递给 OrderGuru,然后将其传递给 AdapterCariGuru(这是问题来的时候) AdapterCariGuru class 扩展到 Recyclerview.Adapater,我想在 setonclick 上获取 Intent听众,我的 android 工作室版本是 3,5。 Casting to Appcompactactivity won't work, Intializing Activity activity = new Activity() and call it on getIntent also won't work投射到 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);
        }
    });

I would suggest you pass any extra as a parameter to your adapter when you initialize it.我建议您在初始化适配器时将任何额外的参数作为参数传递给适配器。

Example:例子:

Activiy活动

  public override fun onCreate(savedInstanceState: Bundle?) {

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

  }

Adapter适配器

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;

  }


}

Adapter on click点击适配器

@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);
    }
}

Also, if your adapter is not meant to be used with differents view holder I would suggest you to do something like this另外,如果您的适配器不适合与不同的视图支架一起使用,我建议您执行类似的操作

Example:例子:

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

  ..remaining code...

}

so you won't need to keep casting the view holder like below所以你不需要像下面一样继续投射视图支架

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

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

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