#java #android
#java #Android
Вопрос:
Как я могу получить позицию для строки в RecyclerView и решить проблему get
public class MyListAdapter extends RecyclerView.Adapter<MyListAdapter.MyViewHolder> {
private String[] listOfItems;
public MyListAdapter(String[] listOfItems){
this.listOfItems = listOfItems;
}
@Override
public MyViewHolder onCreateViewHolder( ViewGroup parent, int i) {
Boolean attachViewImmediatelyToParent = false;
View singleItemLayout = LayoutInflater.from(parent.getContext()).inflate(R.layout.row,parent,attachViewImmediatelyToParent);
MyViewHolder myViewHolder = new MyViewHolder(singleItemLayout);
return myViewHolder;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
holder.textShow.setText(listOfItems[position]);
holder.textShow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Resolve the problem of get in Toast
Toast.makeText(holder.textShow.getContext(), "you pressed the " listOfItems.get(holder.getLayoutPosition() " item"), Toast.LENGTH_SHORT).show();
Resolve the problem of getting in Toast
}
});
}
@Override
public int getItemCount() {
return listOfItems.length;
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView textShow;
public MyViewHolder(View itemView) {
super(itemView);
textShow = (TextView) itemView.findViewById(R.id.tvphrase);
}
}
}
Ответ №1:
ListofItem
Array
не является List
в Java.
Вы должны использовать:
listOfItems[holder.getLayoutPosition()];
И вам следует проверить, не выходит ли за пределы индекс элемента, к которому вы пытаетесь получить доступ по адресу `:
if (holder.getLayoutPosition() < listOfItems.length) {
listOfItems[holder.getLayoutPosition()];
}
else {
Log.d("TAG", "Error: index out of bounds");
}
Для доступа к элементам в Java:
Лучшие
Комментарии:
1. Пожалуйста. Если это ответ на ваш вопрос, пометьте его как решаемый.
Ответ №2:
Будьте осторожны, есть две проблемы:
Toast.makeText(holder.textShow.getContext(), "you pressed the " listOfItems.get(holder.getLayoutPosition() " item"), Toast.LENGTH_SHORT).show();
1) У вас ошибка опечатки: конкатенация "item"
должна быть после закрывающей скобки )
2) listOfItems
является массивом, а не списком, поэтому при использовании следует использовать []
синтаксис.
Итак, правильная строка Toast.makeText(holder.textShow.getContext(), "you pressed the " listOfItems[holder.getAdapterPosition()] " item", Toast.LENGTH_SHORT).show();
ОБНОВИТЬ P.S.
Кроме того, его лучше использовать, getAdapterPosition()
а не getLayoutPosition()
внутри слушателей