web-dev-qa-db-ja.com

RecyclerViewのsetLayoutManager NullPointErexception

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

        }
    }
}

何が間違っているのでしょうか?

18
Ardi

@StenSoftがコメントで指摘したように、問題はsetContentView (R.layout.activity_main_appbar);ではなくsetContentView (R.layout.activity_main);にあり、アクティビティレイアウトのコンテンツが間違っていたためです。

26
Ardi

私の場合、アクティビティの1つでRecyclerViewを作成しなかったため、このエラーが発生します。

アクティビティレイアウトまたはフラグメントレイアウトを確認してください。

7
user2717057