Не удается разрешить метод ‘get (java.lang.string.Строка)’

#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() внутри слушателей