RecyclerView 中的 setLayoutManager NullPointErexception
setLayoutManager NullPointException in RecyclerView
我试图在 RecyclerView 中接收一个带有数组的列表,但出现错误:
java.lang.NullPointerException: Attempt to invoke virtual method
'void android.support.v7.widget.RecyclerView.setLayoutManager
(android.support.v7.widget.RecyclerView$LayoutManager)'on a null object reference
RecyclerView 小部件的
<android.support.v7.widget.RecyclerView
android:id="@+id/drawerList"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.v7.widget.RecyclerView>
我试图将 LayoutManager 声明为 final,但没有帮助。
Activity代码:
public class MainActivity extends ActionBarActivity {
private RecyclerView recyclerView;
private Toolbar toolbar;
private InfAdapter adapter;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_main_appbar);
recyclerView = (RecyclerView) findViewById(R.id.drawerList);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
InfAdapter mAdapter = new InfAdapter(this, getData());
recyclerView.setAdapter(mAdapter);
recyclerView.setItemAnimator(new DefaultItemAnimator());
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
适配器代码:
public class InfAdapter extends RecyclerView.Adapter<InfAdapter.MyViewHolder> {
private final Context context;
private List<Information> data = Collections.emptyList();
public InfAdapter(Context context, List<Information> data){
this.data = data;
this.context = context;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_row, parent, false);
return new MyViewHolder(v);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Information current = data.get(position);
holder.title.setText(current.title);
holder.icon.setImageResource(current.iconid);
}
@Override
public int getItemCount() {
return data.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView title;
ImageView icon;
public MyViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.listText);
icon = (ImageView) itemView.findViewById(R.id.listIcon);
}
}
}
可能出了什么问题?
正如@StenSoft 在评论中指出的那样,问题出在
setContentView (R.layout.activity_main_appbar);
因为 activity 布局内容错误,而不是
setContentView (R.layout.activity_main);
在我的例子中,这个错误是因为我没有在我的 activity 之一中创建 RecyclerView
。
检查您的 activity 布局或片段布局。
我有类似的东西,但是在 kotlin 和里面
RecyclerView.apply {}
代码,在行中:
layoutManager = viewManager
最终我发现这是因为我将错误的布局夸大到片段中,在行中:
return inflater.inflate(R.layout.main_fragment, container, false)
我试图在 RecyclerView 中接收一个带有数组的列表,但出现错误:
java.lang.NullPointerException: Attempt to invoke virtual method
'void android.support.v7.widget.RecyclerView.setLayoutManager
(android.support.v7.widget.RecyclerView$LayoutManager)'on a null object reference
RecyclerView 小部件的
<android.support.v7.widget.RecyclerView
android:id="@+id/drawerList"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.v7.widget.RecyclerView>
我试图将 LayoutManager 声明为 final,但没有帮助。
Activity代码:
public class MainActivity extends ActionBarActivity {
private RecyclerView recyclerView;
private Toolbar toolbar;
private InfAdapter adapter;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_main_appbar);
recyclerView = (RecyclerView) findViewById(R.id.drawerList);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
InfAdapter mAdapter = new InfAdapter(this, getData());
recyclerView.setAdapter(mAdapter);
recyclerView.setItemAnimator(new DefaultItemAnimator());
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
适配器代码:
public class InfAdapter extends RecyclerView.Adapter<InfAdapter.MyViewHolder> {
private final Context context;
private List<Information> data = Collections.emptyList();
public InfAdapter(Context context, List<Information> data){
this.data = data;
this.context = context;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_row, parent, false);
return new MyViewHolder(v);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Information current = data.get(position);
holder.title.setText(current.title);
holder.icon.setImageResource(current.iconid);
}
@Override
public int getItemCount() {
return data.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView title;
ImageView icon;
public MyViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.listText);
icon = (ImageView) itemView.findViewById(R.id.listIcon);
}
}
}
可能出了什么问题?
正如@StenSoft 在评论中指出的那样,问题出在
setContentView (R.layout.activity_main_appbar);
因为 activity 布局内容错误,而不是
setContentView (R.layout.activity_main);
在我的例子中,这个错误是因为我没有在我的 activity 之一中创建 RecyclerView
。
检查您的 activity 布局或片段布局。
我有类似的东西,但是在 kotlin 和里面
RecyclerView.apply {}
代码,在行中:
layoutManager = viewManager
最终我发现这是因为我将错误的布局夸大到片段中,在行中:
return inflater.inflate(R.layout.main_fragment, container, false)