Android Recycler View проблема в "onBindViewHolder" функция "stati c метод не может быть вызван из non-stati c method" - PullRequest
1 голос
/ 17 января 2020

Я новичок в android и java. Я не могу вызвать ViewHolder.setCategoryName(name); в функции onBindViewHolder. Я знаю, что, возможно, есть похожие вопросы, но у меня пока ничего не получалось. Компилятор выдает сообщение об ошибке «Нестандартные c функции не могут быть вызваны из статического c контекста», я нигде не использовал ключевое слово stati c в моем коде.

public class CategoryAdapter extends RecyclerView.Adapter<CategoryAdapter.ViewHolder> {

    private List<CategoryModel> categoryModelList;

    public CategoryAdapter(List<CategoryModel> categoryModelList) {
        this.categoryModelList = categoryModelList;
    }

    @NonNull
    @Override
    public CategoryAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.category_item,viewGroup,false);
        return new ViewHolder(view);
    }

    @Override
    public  void onBindViewHolder(@NonNull CategoryAdapter.ViewHolder holder, int position) {
        String icon = categoryModelList.get(position).getCategoryIconLink();
        String name = categoryModelList.get(position).getCategoryName();
        ViewHolder.setCategoryName(name);

    }


    @Override
    public int getItemCount() {
        return categoryModelList.size();
    }


    public class ViewHolder extends  RecyclerView.ViewHolder{

       private ImageView categoryIcon;
       private TextView categoryName;

        public ViewHolder(@NonNull View itemView)  {
              super(itemView);
              categoryIcon = itemView.findViewById(R.id.category_icon);
              categoryName = itemView.findViewById(R.id.category_name);

        }

        private void setCategoryIcon(){

        }
        private void setCategoryName(String name){

            categoryName.setText(name);
        }
    }
}

Ответы [ 2 ]

1 голос
/ 18 января 2020

Проблема в том, что ваш метод не является c, но вы пытаетесь вызвать из контекста c:

 private void setCategoryName

Вам необходимо сделать:

 private static void setCategoryName

Однако для этого типа действия вы можете просто использовать переменную holder:

holder.bind(categoryModelList.get(position))
0 голосов
/ 17 января 2020

попробуйте это:

public class CategoryAdapter extends RecyclerView.Adapter<CategoryAdapter.ViewHolder> {

    private List<CategoryModel> categoryModelList;

    public CategoryAdapter(List<CategoryModel> categoryModelList) {
        this.categoryModelList = categoryModelList;
    }

    @NonNull
    @Override
    public CategoryAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.category_item,viewGroup,false);
        return new ViewHolder(view);
    }

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

    holder.bind(categoryModelList.get(position))

    }


    @Override
    public int getItemCount() {
        return categoryModelList.size();
    }


    public class ViewHolder extends  RecyclerView.ViewHolder{

       private ImageView categoryIcon;
       private TextView categoryName;

        public ViewHolder(@NonNull View itemView)  {
              super(itemView);
              categoryIcon = itemView.findViewById(R.id.category_icon);
              categoryName = itemView.findViewById(R.id.category_name);

        }

       public void bind(CategoryModel categoryModel){

             categoryName.setText(categoryModel.getCategoryName());
        }
    }
}
...