#android-studio #android-recyclerview #onitemclicklistener
#android-studio #android-recyclerview #onitemclicklistener
Вопрос:
Это основное действие. Если я пытаюсь добавить setOnItemClickListener в представление recycler, он сообщает «Не удается разрешить метод ‘setOnItemClickListener’ в ‘RecyclerView'»
открытый класс MainActivity расширяет AppCompatActivity {
private static final String TAG = "MainActivity";
RecyclerView recyclerView;
linkRecViewAdapter adapter;
ArrayList<Link> newLink = new ArrayList<>();
private ActionMode currentActionMode;
private int currentListItemIndex;
private ActionMode.Callback modeCallBack;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate: ");
adapter = new linkRecViewAdapter(this);
adapter.setLinks(newLink);
recyclerView = findViewById(R.id.recView);
recyclerView.setAdapter(adapter);
recyclerView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
if (currentActionMode != null) {
return false;
}
currentActionMode = startActionMode(modeCallBack);
view.setSelected(true);
return true;
}
});
recyclerView.setLayoutManager(new LinearLayoutManager(this));
}
Это класс адаптера
общедоступный класс linkRecViewAdapter расширяет RecyclerView.Адаптер<linkRecViewAdapter.ViewHolder> {
Context context;
ArrayList<Link> links;
public linkRecViewAdapter(Context context) {
this.context = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.link_rec_view, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
holder.txtFolderName.setText(links.get(position).getFolderName());
holder.txtItemCount.setText(links.get(position).getItemCount());
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, NewDirectory.class);
context.startActivity(intent);
}
});
holder.cardView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
Toast.makeText(context, "This is a cardView", Toast.LENGTH_SHORT).show();
return true;
}
});
}
@Override
public int getItemCount() {
return links.size();
}
public void setLinks(ArrayList<Link> links) {
this.links = links;
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView txtFolderName, txtItemCount, txtDateCreated;
CardView cardView;
RelativeLayout edtRelLay;
ImageView imgLink, imgFolder;
public ViewHolder(@NonNull View itemView) {
super(itemView);
txtFolderName = itemView.findViewById(R.id.txtFolderName);
txtItemCount = itemView.findViewById(R.id.txtItemCount);
txtDateCreated = itemView.findViewById(R.id.txtDateCreated);
cardView = itemView.findViewById(R.id.cardView);
edtRelLay = itemView.findViewById(R.id.edtRelLay);
imgFolder = itemView.findViewById(R.id.imgFolder);
imgLink = itemView.findViewById(R.id.imgLink);
}
}
}
Комментарии:
1. Пожалуйста, расскажите подробнее о вашей проблеме и вставьте свой код здесь, чтобы связаться с вами. Это зависит от вашего кода!
2. @MatinZD Я опубликовал свой код. Пожалуйста, помогите мне.
Ответ №1:
Для сборки RecyclerView нет прослушивателя щелчков. Вам нужно реализовать его самостоятельно, указанным способом и в таком месте, как вы сделали здесь:
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
holder.txtFolderName.setText(links.get(position).getFolderName());
holder.txtItemCount.setText(links.get(position).getItemCount());
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, NewDirectory.class);
context.startActivity(intent);
}
});
holder.cardView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
Toast.makeText(context, "This is a cardView", Toast.LENGTH_SHORT).show();
return true;
}
});
}
Единственное отличие заключается в том, что вам нужно установить прослушиватель щелчков в самом родительском представлении — для этого вам сначала нужно сохранить его в вашем ViewHolder
public class ViewHolder extends RecyclerView.ViewHolder {
TextView txtFolderName, txtItemCount, txtDateCreated;
CardView cardView;
RelativeLayout edtRelLay;
ImageView imgLink, imgFolder;
View itemView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
this.itemView = itemView;
txtFolderName = itemView.findViewById(R.id.txtFolderName);
txtItemCount = itemView.findViewById(R.id.txtItemCount);
txtDateCreated = itemView.findViewById(R.id.txtDateCreated);
cardView = itemView.findViewById(R.id.cardView);
edtRelLay = itemView.findViewById(R.id.edtRelLay);
imgFolder = itemView.findViewById(R.id.imgFolder);
imgLink = itemView.findViewById(R.id.imgLink);
}
}