【问题标题】:RecyclerView dont call OnCreateViewHolder, OnBindViewHolder, GetItemCount() [duplicate]RecyclerView 不调用 OnCreateViewHolder、OnBindViewHolder、GetItemCount() [重复]
【发布时间】:2018-07-30 09:53:38
【问题描述】:

在这段代码中,我在 RecyclerView 类 的每一行都使用了断点,但是这个类的唯一构造函数被调用,不再调用函数(OnCreateViewHolder、OnBindViewHolder、GetItemCount() 等) enter image description here。来自 LogCat 的图像也已上传...

MainActivity

package com.example.admin.recyclerview;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    RecyclerView.Adapter adapter;
    RecyclerView.LayoutManager layoutManager;
    String[] titles;
    String[] description;
    int[] images = {R.drawable.facebook, R.drawable.instagram, R.drawable.twitter, R.drawable.google};
    ArrayList<DataProvider> arrayList = new ArrayList<DataProvider>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = findViewById(R.id.recyclerView);
        titles = getResources().getStringArray(R.array.titles);
        description = getResources().getStringArray(R.array.description);
        int i = 0;
        for(String name : titles){
            DataProvider dataProvider = new DataProvider(images[i], titles[i], description[i]);
            arrayList.add(dataProvider);
            i++;
        }

        adapter = new RecyclerAdapter(arrayList);
        recyclerView.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setAdapter(adapter);
    }
}

RecyclerView 类

package com.example.admin.recyclerview;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> {

    private ArrayList<DataProvider> arrayList = new ArrayList<DataProvider>();

    public RecyclerAdapter(ArrayList<DataProvider> arrayList){
        this.arrayList = arrayList;
    }

    @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_layout, viewGroup, false);
        return new RecyclerViewHolder(view);
    }

    @Override
    public void onBindViewHolder(RecyclerViewHolder recyclerViewHolder, int i) {
        DataProvider dataProvider = arrayList.get(i);
        recyclerViewHolder.imageView.setImageResource(dataProvider.getImage_res());
        recyclerViewHolder.title.setText(dataProvider.getTitle());
        recyclerViewHolder.description.setText(dataProvider.getDescription());
    }

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

    public static class RecyclerViewHolder extends RecyclerView.ViewHolder{
        ImageView imageView;
        TextView title;
        TextView description;

        public RecyclerViewHolder(@NonNull View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.icon);
            title = itemView.findViewById(R.id.title);
            description = itemView.findViewById(R.id.description);
        }
    }
}

数据提供者

package com.example.admin.recyclerview;

public class DataProvider {
    private int image_res;
    private String title;
    private String description;


    public DataProvider(int image_res, String title, String description) {
        this.image_res = image_res;
        this.title = title;
        this.description = description;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getImage_res() {
        return image_res;
    }

    public void setImage_res(int image_res) {
        this.image_res = image_res;
    }
}

【问题讨论】:

  • 你必须添加 setLayoutManager();

标签: android


【解决方案1】:

您没有将 LayoutManager 添加到您的 RV。

recyclerView.setLayoutManager(layoutManager)

否则您的房车将无法运行

【讨论】:

    【解决方案2】:

    您错过了添加LayoutManager。添加recyclerView.setLayoutManager(layoutManager);

        adapter = new RecyclerAdapter(arrayList);
        recyclerView.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager); // add this line
        recyclerView.setAdapter(adapter);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      • 2021-11-19
      • 2023-03-21
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多