2016-04-14 4 views
0

私はグライドを使用しているときに新しいです。私は、外部記憶装置から画像をロードしようとするが、私はlogcatでエラーが発生しました:グライドでの私のコンテキストがlogcatでnullを返すエラーを返すのはなぜですか?

enter image description here

ロードイメージのためのグライドを使用recycleviewアダプタの私のクラスがあります:

List<TourModel> mItems; 
    private Context mContext; 

    public class ViewHolder extends RecyclerView.ViewHolder{ 
     public ImageView mIvMain,mIvStar1,mIvStar2,mIvStar3,mIvStar4,mIvStar5; 
     public TextView mTvTitle,mTvPrice; 
     public RelativeLayout mLayoutContainer; 
     public ViewHolder(View mItemView) { 
      super(mItemView); 
      mIvMain = (ImageView) mItemView.findViewById(R.id.listFragmentMain_IvMain); 
      mIvStar1= (ImageView) mItemView.findViewById(R.id.listFragmentMain_IvStar1); 
      mIvStar2= (ImageView) mItemView.findViewById(R.id.listFragmentMain_IvStar2); 
      mIvStar3= (ImageView) mItemView.findViewById(R.id.listFragmentMain_IvStar3); 
      mIvStar4= (ImageView) mItemView.findViewById(R.id.listFragmentMain_IvStar4); 
      mIvStar5= (ImageView) mItemView.findViewById(R.id.listFragmentMain_IvStar5); 
      mTvTitle = (TextView) mItemView.findViewById(R.id.listFragmentMain_TvTitle); 
      mTvPrice = (TextView) mItemView.findViewById(R.id.listFragmentMain_TvPrice); 
      mLayoutContainer = (RelativeLayout)mItemView.findViewById(R.id.listFragmentMain_LayoutContainer); 
     } 
    } 

    public TourListRvAdapter(Context mContext,List<TourModel> mModel) { 
     this.mItems = mModel; 
     this.mContext = mContext; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup mViewGroup, int i) { 
     View mView = LayoutInflater.from(mViewGroup.getContext()).inflate(R.layout.list_fragment_main, mViewGroup, false); 
     ViewHolder mViewHold = new ViewHolder(mView); 
     return mViewHold; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder mViewHolder, int position) { 
     final TourModel mItems=this.mItems.get(position); 
     mViewHolder.mTvTitle.setText(mItems.getTitle()); 
     mViewHolder.mTvPrice.setText(mItems.getPrice() + ""); 

     Glide.with(mContext) 
       .load(Utility.LoadFileImg(mItems.getImage())) 
       .into(mViewHolder.mIvMain); 
    } 

は、私がありますリサイクルビューアダプターを呼び出し、可変コンテキストを追加するフラグメントアクティビティ

Public class TourListFragment extends Fragment { 
    private static final String TAG = TourListFragment.class.getSimpleName(); 
    private final Context mContext = getActivity(); 

    private int position; 
    private List<TourModel> mListItem; 

    private RecyclerView mRecycleView; 

    private TourListRvAdapter mTouListAdapter; 

    public static TourListFragment newInstance(int position) { 
     TourListFragment f = new TourListFragment(); 
     Bundle b = new Bundle(); 
     b.putInt(VariableConstants.POSITION, position); 
     f.setArguments(b); 
     return f; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     position = getArguments().getInt(VariableConstants.POSITION); 
     TourDAO mDao = new TourDAO(getContext()); 
     mListItem = mDao.getAllDataReturnModel(); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     Log.e(TAG, "" + position); 

      View rootView = inflater.inflate(R.layout.fragment_main, container, false); 

      mRecycleView = (RecyclerView) rootView.findViewById(R.id.fragmentMain_RvTourList); 
      mRecycleView .setHasFixedSize(true); // in content do not change the layout size of the RecyclerView 
      RecyclerView.LayoutManager mLayoutManager= new LinearLayoutManager(mContext); // use a linear layout manager 
      mRecycleView.setLayoutManager(mLayoutManager); 

      mTouListAdapter = new TourListRvAdapter(mContext,mListItem); 
      mRecycleView.setAdapter(mTouListAdapter); 

      //iewCompat.setElevation(rootView, 50); 
      return rootView; 

    } 
} 

私の変数mContextがnullを返す理由は分かりませんが、誰でも助けてくれますか?お願いします。

答えて

3

mViewHolder.itemView.getContext()を使用してください。これは、onCreateViewHolderで使用しているのと同じコンテキストであり、アダプタ内の参照を維持する代わりに、ビューを膨張させます。あなたが戻っているフラグメントは、その時とgetActivity()でそのライフサイクルを通過しなかったメンバー

private final Context mContext = getActivity(); 

を初期化しているためmContextがnullの場合はnull

+0

*あなたが*でonCreateViewHolder使用している同じコンテキストがあります...まだヌルです...主な問題は、フラグメント – Selvin

+0

の 'private final Context mContext = getActivity();'がおそらく貧しい言葉@Selvinです。 'onCreateViewHolder'はViewGroupを使ってビューを膨張させます。それは、私が意味したもの – Blackbelt

+0

私はすでにそれを変更しました、ありがとう、あなたのコードは仕事です:) @Blackbelt – itsa04g9

関連する問題