簡體   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