简体   繁体   中英

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. Casting to Appcompactactivity won't work, Intializing Activity activity = new Activity() and call it on getIntent also won't work

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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