想在Fragment里面添加一个RecyclerView 然后在初始化RecyclerView后 setAdapter一直报空指针异常

2017-05-06 02:34
如题 初始化也做了 但是不知道是不是初始化的那个View是错误的 本人新手不太懂 下面是代码
Fragment
package com.lorentzos.flingswipe;

import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.shall.tantandemo.R;
import com.lorentzos.swipecards.RecyclerAdapter;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Created by Sawano on 2016/7/16.
 */
public class FragmentOne extends Fragment {

    private RecyclerView mRecyclerView;
    LinearLayoutManager linearLayoutManager;
    RecyclerAdapter mAdapter;
    private List<Integer> mDatas;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {



        View view = inflater.inflate(R.layout.fragment_one, container, false);
        mRecyclerView = (RecyclerView)view.findViewById(R.id.recyclerView);

        return view;
    }


    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        mDatas = new ArrayList<>(Arrays.asList(R.mipmap.back, R.mipmap.qiu, R.mipmap.img_1, R.mipmap.img_2,
                R.mipmap.img_3, R.mipmap.img_4, R.mipmap.img_5, R.mipmap.img_6));

        for(int i = 0; i < 15; i++) {
            mDatas.add(i);

        }

        mAdapter = new RecyclerAdapter(this.getActivity(), mDatas);
        Log.d("hhhh", "mRecyclerView="+mRecyclerView);
        Log.d("hhhh", "mAdapter=" + mAdapter);

        linearLayoutManager = new LinearLayoutManager(this.getActivity(), LinearLayoutManager.VERTICAL, false);
        mRecyclerView.setLayoutManager(linearLayoutManager);
        mRecyclerView.setAdapter(mAdapter);

    }

}


这是Adapter


回复讨论(解决方案)

这是Adapter
package com.lorentzos.swipecards;


import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.shall.tantandemo.R;

import java.util.List;

/**
 * Created by Sawano on 2016/7/17.
 */
public class RecyclerAdapter extends RecyclerView.Adapter<MyViewHolder>{

    private LayoutInflater mInflater;
    private List<Integer> mDatas;

    public RecyclerAdapter(Context context, List<Integer> datas) {
        this.mDatas = datas;
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = mInflater.inflate(R.layout.fragment_one, parent, false);
        MyViewHolder viewHolder = new MyViewHolder(view);
        return viewHolder;
    }


    public void onBindViewHolder(MyViewHolder holder,  int position) {
        holder.imageView.setImageResource(mDatas.get(position));
    }

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

class MyViewHolder extends RecyclerView.ViewHolder {

    ImageView imageView;
    TextView textView;

    public MyViewHolder(View itemView) {
        super(itemView);

        imageView = (ImageView) itemView.findViewById(R.id.frg_img);
        textView = (TextView) itemView.findViewById(R.id.frg_text);
    }
}

报错的是FragmentOne里的mRecyclerView 我用Log.d测试说是mRecyclerView = null
 mDatas = new ArrayList<>(Arrays.asList(R.mipmap.back, R.mipmap.qiu, R.mipmap.img_1, R.mipmap.img_2,
                R.mipmap.img_3, R.mipmap.img_4, R.mipmap.img_5, R.mipmap.img_6));

        for(int i = 0; i < 15; i++) {
            mDatas.add(i);

        }
关键之这个,你把mDatas已经初始化了几个img,但是又添加个for循环,加入15个int类型的值做什么?
你没搞明白fragment的生命周期吧。onActivityCreate执行的时候,你没还没执行onCreateView呢,这个时候你的recyclerview当然是空的了
 mDatas = new ArrayList<>(Arrays.asList(R.mipmap.back, R.mipmap.qiu, R.mipmap.img_1, R.mipmap.img_2,
                R.mipmap.img_3, R.mipmap.img_4, R.mipmap.img_5, R.mipmap.img_6));

        for(int i = 0; i < 15; i++) {
            mDatas.add(i);

        }
关键之这个,你把mDatas已经初始化了几个img,但是又添加个for循环,加入15个int类型的值做什么?
 这个是先前还没改的 不好意思- -见笑了 
你没搞明白fragment的生命周期吧。onActivityCreate执行的时候,你没还没执行onCreateView呢,这个时候你的recyclerview当然是空的了
执行孙玺难道不是这样么 求指正 新手不太懂 麻烦了
楼主解决了么?
你那里应该用 onViewCreated 这样执行顺序才对
到底怎么解决