2016-03-21 51 views
0

recyclerviewアダプターでレイアウトxmlを膨らませています。しかし、私はいつもNPEに遭遇しており、問題の根を見つけることができないようです。ここでonBindViewHolderがビューを見つけることができません

は私のlogcatです:

E/AndroidRuntime: FATAL EXCEPTION: main 
 
java.lang.NullPointerException 
 
at com.softtech.stevekamau.buyathome.adapter.RecomGridAdapter.onBindViewHolder(RecomGridAdapter.java:159) 
 
at com.softtech.stevekamau.buyathome.adapter.RecomGridAdapter.onBindViewHolder(RecomGridAdapter.java:120) 
 
    at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5217) 
 
    at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5250) 
 
    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4487) 
 
    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4363) 
 
    at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961) 
 
    at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1370) 
 
    at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333) 
 
    at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562) 
 
    at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2900) 
 
    at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3071) 
 
    at android.view.View.layout(View.java:13754) 
 
    at android.view.ViewGroup.layout(ViewGroup.java:4362) 
 
     
 
    .......

そして、私のアダプタ:

public class RecomGridAdapter extends RecyclerView.Adapter<RecomGridAdapter.ViewHolder> { 
 
    private List<NewModel> modelItems; 
 

 
    // Provide a reference to the views for each data item 
 
    // Complex data items may need more than one view per item, and 
 
    // you provide access to all the views for a data item in a view holder 
 
    public static class ViewHolder extends RecyclerView.ViewHolder { 
 
     // each data item is just a string in this case 
 
     public TextView mTextView; 
 

 
     public ViewHolder(View v) { 
 
      super(v); 
 
      mTextView = (TextView) v.findViewById(R.id.name); 
 
     } 
 
    } 
 

 
    // Provide a suitable constructor (depends on the kind of dataset) 
 
    public RecomGridAdapter(List<NewModel> modelItems) { 
 
     this.modelItems = modelItems; 
 
    } 
 

 
    // Create new views (invoked by the layout manager) 
 
    @Override 
 
    public RecomGridAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, 
 
                 int viewType) { 
 
     // create a new view 
 
     View v = LayoutInflater.from(parent.getContext()) 
 
       .inflate(R.layout.grid_cell, parent, false); 
 
     // set the view's size, margins, paddings and layout parameters 
 

 
     return new ViewHolder(v); 
 
    } 
 

 
    // Replace the contents of a view (invoked by the layout manager) 
 
    @Override 
 
    public void onBindViewHolder(ViewHolder holder, int position) { 
 
     // - get element from your dataset at this position 
 
     // - replace the contents of the view with that element 
 
     NewModel m = modelItems.get(position); 
 
     holder.mTextView.setText(m.getName()); 
 

 
    } 
 

 
    // Return the size of your dataset (invoked by the layout manager) 
 
    @Override 
 
    public int getItemCount() { 
 
     return modelItems.size(); 
 
    } 
 
}

そして、私のgrid_cell.xml:私の例外が発生する場所

holder.mTextView.setText(m.getName()); 

です:

<?xml version="1.0" encoding="utf-8"?> 
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
 
    xmlns:foobar="http://schemas.android.com/apk/res-auto" 
 
    android:layout_width="118dp" 
 
    android:layout_height="wrap_content" 
 
    android:layout_marginLeft="5dp"> 
 

 
    <android.support.v7.widget.CardView 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:background="@drawable/list_row_selector" 
 
     card_view:cardCornerRadius="3dp"> 
 

 
     <LinearLayout 
 
      android:layout_width="wrap_content" 
 
      android:layout_height="wrap_content" 
 
      android:orientation="vertical"> 
 

 
      <com.android.volley.toolbox.NetworkImageView 
 
       android:id="@+id/thumbnail" 
 
       android:layout_width="100dp" 
 
       android:layout_height="100dp" 
 
       android:layout_centerHorizontal="true" 
 
       android:layout_margin="5dp" 
 
       android:scaleType="centerCrop" 
 
       android:src="@drawable/loading4" /> 
 

 
      <RelativeLayout 
 
       android:layout_width="110dp" 
 
       android:layout_height="60dp"> 
 

 
       <ImageView 
 
        android:id="@+id/options" 
 
        android:layout_width="30dp" 
 
        android:layout_height="30dp" 
 
        android:layout_alignParentRight="true" 
 
        android:src="@drawable/options" /> 
 

 
       <com.ctrlplusz.anytextview.AnyTextView 
 
        android:id="@+id/title" 
 
        android:layout_width="70dp" 
 
        android:layout_height="35dp" 
 
        android:ellipsize="end" 
 
        android:ems="10" 
 
        android:gravity="start" 
 
        android:maxLines="2" 
 
        android:paddingLeft="5dp" 
 
        android:text="Samsungf usb cablexvndvnsddvjdbv" 
 
        android:textSize="14dp" 
 
        android:textStyle="bold" 
 
        foobar:typeface="Gudea-Regular.ttf" /> 
 

 
       <com.ctrlplusz.anytextview.AnyTextView 
 
        android:id="@+id/amount" 
 
        android:layout_width="110dp" 
 
        android:layout_height="wrap_content" 
 
        android:layout_below="@+id/title" 
 
        android:ellipsize="end" 
 
        android:ems="10" 
 
        android:paddingLeft="5dp" 
 
        android:singleLine="true" 
 
        android:text="10000000000" 
 
        android:textColor="#cf5862" 
 
        android:textSize="18dp" 
 
        foobar:typeface="Gudea-Bold.ttf" /> 
 
      </RelativeLayout> 
 
     </LinearLayout> 
 
    </android.support.v7.widget.CardView> 
 
</LinearLayout>

logcatは、この行があることを示唆しています。 m.getName()は、私がholder.mTextView.setText("Test");を試したので、間違いなく、問題でもありません。

正確に何が起こっているのですか?

+0

の可能な複製を(http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-do-fix-it) – 0X0nosugar

答えて

1

grid_cell.xmlのテキストのIDは、タイトルと量で、名前の代わりに1つを使用してください。あなたのxmlファイルにid名とはTextViewがないので、この

mTextView = (TextView) v.findViewById(R.id.title); 
1

問題のようなものがTextView = (TextView) v.findViewById(R.id.name); return null;です。 textviewの初期化の代わりにtextViewid="name"と追加するか、 を使用することができます。

1

mTextViewは、grid_cell.xmlのIDがnameのビューがないため、nullです。課題を次のように変更してみてください:

mTextView = (TextView) v.findViewById(R.id.title); 

"タイトル"は、あなたが取得しようとしていたものです。

[編集] 私の前にミゲルが謝罪しました!

1

xmlファイルには、「名前」IDのTextViewはありません。 でR.id.nameをどのように使用しますか?あなたはViewHolderクラスに変更する必要があります[?NULLポインタ例外であり、私はそれをどのように修正すればよい何]

mTextView = (TextView) v.findViewById(R.id.title); 

OR

mTextView = (TextView) v.findViewById(R.id.amount); 
関連する問題