当我尝试运行我的代码时,它给我一个错误,说我正在尝试对空对象引用尝试 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/