【问题标题】:setLayoutManager NullPointException in RecyclerViewRecyclerView 中的 setLayoutManager NullPointErexception
【发布时间】:2015-04-18 16:48:22
【问题描述】:

我正在尝试在 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,但没有帮助。

活动代码:

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);

        }
    }
}

可能出了什么问题?

【问题讨论】:

  • 你也可以发布你的布局代码吗....你的布局代码有像这样的 RecyclerView &lt;android.support.v7.widget.RecyclerView 否则你可能会出错
  • @Ranjith 是的,包括在内
  • LogCat 输出应该为您提供发生空指针异常的特定代码行,或者您可以在调试器中运行它并在 setLayoutManger 代码行处设置断点并查看哪个对象为空。
  • 提供您的整个布局文件。这看起来像您为活动设置的布局不包含用于回收器视图的 id。
  • RecyclerViewlayout/activity_main_appbar.xml 中吗?

标签: android android-5.0-lollipop material-design android-recyclerview


【解决方案1】:

正如@StenSoft 在 cmets 中指出的那样,问题出在 setContentView (R.layout.activity_main_appbar); 因为活动布局内容错误,而不是 setContentView (R.layout.activity_main);

【讨论】:

  • 该死的复制粘贴... -_-
  • @nimi0112 ikr!哈哈
【解决方案2】:

在我的情况下,出现此错误是因为我没有在我的一项活动中创建 RecyclerView

检查您的活动布局或片段布局。

【讨论】:

    【解决方案3】:

    我有类似的东西,但在 kotlin 和里面

    RecyclerView.apply {} 
    

    代码,在行中:

    layoutManager = viewManager
    

    最终我发现这是因为我将错误的布局膨胀到片段中,在以下行中:

    return inflater.inflate(R.layout.main_fragment, container, false)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多