簡體   English   中英

使用 Intent 將用戶從適配器發送到另一個活動

[英]Using Intent to send user to another activity from Adapter

我試圖將用戶發送到另一個活動,當他在收集 position 后單擊回收視圖內的圖片時,無論我做什么,問題我仍然在使用上下文時在適配器上設置 null,請找到下面的代碼並向我描述我錯過了什么?!

問題出在 onclick 方法的代碼中(最后一個):-

 package com.example.boc.Teachers; import androidx.appcompat.app.AppCompatActivity; import androidx.cardview.widget.CardView; import androidx.recyclerview.widget.RecyclerView; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.example.boc.R; import com.example.boc.main.DashboardActivity; import java.util.ArrayList; public class TeachersAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private LayoutInflater mInflater; private ArrayList<TeachersModel> items; private TeacherMain mActivity; private Context context; public TeachersAdapter(ArrayList<TeachersModel> data, TeacherMain activity) { this.items = data; this.mActivity = activity; this.mInflater = LayoutInflater.from(mActivity); } public void addItem(TeachersModel result) { items.add(result); } public TeachersAdapter(Context context) { this.context = context; } public void setInflater(LayoutInflater layoutInflater){ this.mInflater =layoutInflater; } public void replaceItems(ArrayList<TeachersModel> newItems) { this.items.clear(); for(TeachersModel item: newItems) this.items.add(item); } public void insertItem(TeachersModel item) { items.add(0, item); } public void clearItems(){ items.clear(); } public void AddResults(ArrayList<TeachersModel> result) { items.addAll(result); } public TeachersModel getItemsAt(int position){ return items.get(position); } @Override public int getItemCount() { return items.size(); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { TeachersModel model = items.get(position); MessageViewHolder messageViewHolder = (MessageViewHolder) holder; messageViewHolder.imageViewIcon.setBackgroundResource(model.getImage()); messageViewHolder.textViewName.setText(model.getName()); messageViewHolder.textViewStatus.setText(model.getStatus()); messageViewHolder.textViewMobile.setText(model.getMobile()); } @Override public int getItemViewType(int position) { return super.getItemViewType(position); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View rootCategoryView = mInflater.inflate(R.layout.row_item_teachers, parent, false); return new MessageViewHolder(rootCategoryView, this); } private class MessageViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { private ImageView imageViewIcon; private TextView textViewName; private TextView textViewStatus; private TextView textViewMobile; private CardView cardView; private MessageViewHolder(View itemView, TeachersAdapter adapter) { super(itemView); imageViewIcon = (ImageView) itemView.findViewById(R.id.imageViewIcon); textViewName = (TextView) itemView.findViewById(R.id.textViewName); textViewStatus = (TextView) itemView.findViewById(R.id.textViewStatus); textViewMobile = (TextView) itemView.findViewById(R.id.textViewMobile); cardView = (CardView) itemView.findViewById(R.id.cardView); cardView.setOnClickListener(this); } @Override public void onClick(View v) { final int pos = getAdapterPosition(); if (pos == 0) { imageViewIcon.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent( context, DashboardActivity.class ); context.startActivity( intent ); } } ); Toast.makeText(mActivity, "Selected Item Position "+pos, Toast.LENGTH_SHORT).show(); } } } }

我假設您正在使用constrcutor而不傳遞context

//update the constructor to take a context

public TeachersAdapter(ArrayList<TeachersModel> data, TeacherMain activity , Context context) {
this.items = data;
this.mActivity = activity;
this.mInflater = LayoutInflater.from(mActivity);
//add this
this.context = context;
}

onBindViewHolder中設置點擊監聽器:

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

....
....
....

messageViewHolder.imageViewIcon.setOnClickListener( new View.OnClickListener() {

@Override
public void onClick(View view) {

Intent intent = new Intent(context, DashboardActivity.class );
context.startActivity(intent);
}
});

}

在活動中創建adapter時,請確保傳遞正確的context

adapter = new TeachersAdapter(... , .... ,  getApplicationContext());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM