java - android studio 尝试在空对象引用上调用虚拟方法 'void android.support.v7.widget.RecyclerView.setHasFixedSize(boolean)'

标签 java android

当我尝试运行我的代码时,它给我一个错误,说我正在尝试对空对象引用尝试 RecyclerView。 android studio检测到的问题在这一行 recyclerView.setHasFixedSize(true); 。有人知道问题所在吗?

这是 Activity :

public class SalesHistoryActivity extends AppCompatActivity {

    @BindView(R.id.sales_recycler)
    RecyclerView recyclerView;

    SalesAdapter adapter;
    List<Sales> salesList;
    Sales sales;

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


        salesList = new ArrayList<>();
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        adapter = new SalesAdapter(this, salesList);
        recyclerView.setAdapter(adapter);

        loadItem();

    }

这是适配器

public class SalesAdapter extends RecyclerView.Adapter<SalesAdapter.ItemViewHolder> {

    private Context mCtx;
    private List<Sales> salesList;

    public SalesAdapter(Context mCtx, List<Sales> salesList){
        this.mCtx = mCtx;
        this.salesList = salesList;
    }

    @NonNull
    @Override
    public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View rootView = LayoutInflater.from(mCtx).inflate(R.layout.list_sales, null, false);
         RecyclerView.LayoutParams layoutParams = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        rootView.setLayoutParams(layoutParams);
        return new ItemViewHolder(rootView);
    }

    @Override
    public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {

        final Sales sales =salesList.get(position);

        holder.tvDate.setText(sales.getDate());
        holder.tvType.setText(sales.getType());
        holder.tvQty.setText(sales.getQty());
        holder.tvPrice.setText(mCtx.getString(R.string.price, sales.getPrice()));

    }

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

    public class ItemViewHolder extends RecyclerView.ViewHolder {

        TextView tvDate, tvType, tvQty, tvPrice;
        public ItemViewHolder(@NonNull View itemView) {
            super(itemView);
        }
    }
}

最佳答案

这只是因为您在使用 ButterKnife 库时忘记绑定(bind) View 。因此,您需要通过添加 ButterKnife.bind(this) 来更改代码:

public class SalesHistoryActivity extends AppCompatActivity {

    @BindView(R.id.sales_recycler)
    RecyclerView recyclerView;

    ..

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

        ButterKnife.bind(this);

        // now your views are binded. You can access them

        ...

        recyclerView.setHasFixedSize(true);

        ...

    }

}

关于java - android studio 尝试在空对象引用上调用虚拟方法 'void android.support.v7.widget.RecyclerView.setHasFixedSize(boolean)',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55376635/

相关文章:

java - 如何测试 ArrayList<String> 中的某个项目是否位于某个位置

java - 无法调用部署在 Weblogic 12c (12.1.3) 远程服务器上的 REST 资源。当它在本地主机上运行时没有任何问题

android - JSON 数据解析 - 如何?

java - Android:在蓝牙应用程序的单个 APK 上支持多个 API 级别

java - 删除 Spark 数组列中的重复项

java - 不同任务的不同taskScheduler

Java 和 SEO 友好的 URL : ©reate ╨ a valid http URL from a string composed by special caracters

java - android webview中textview的增减

android - TextureView TranslationX & Y 在 API 23 上不是预期的行为

android - 如何在 React Navigation 中创建屏幕下推