2016-12-24 2 views
1

Ich verwende RecyclerView in einem Fragment, es ist eine NullPointerException generiert und ich kann den Grund nicht verstehen.Warum gibt die Recycler-Ansicht eine Nullzeiger-Ausnahme?

Hier ist meine Fragment Aktivität:

public class Recharges extends Fragment { 

public RecyclerView recyclerView; 
private List<GetRecharge> rechargeList = new ArrayList<>(); 
public RecyclerView.LayoutManager layoutManager; 
private RecyclerView.Adapter adapter; 
ImageView image1, image2; 

@Nullable @Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    Toolbar myToolbar = (Toolbar) getActivity().findViewById(R.id.my_toolbar); 
    ((AppCompatActivity) getActivity()).setSupportActionBar(myToolbar); 

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

    recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerview1); 
    recyclerView.setHasFixedSize(true); 

    final FragmentActivity c = getActivity(); 

    layoutManager = new LinearLayoutManager(c); 
    recyclerView.setLayoutManager(layoutManager); 

    adapter = new Adapterrecharge(rechargeList); 
    recyclerView.setAdapter(adapter); 

    prepareRechargeData(); 

    return rootView; 

} 

private void prepareRechargeData() { 
    GetRecharge recharge = new GetRecharge("Mad Max: Fury Road"); 
    rechargeList.add(recharge); 

    adapter.notifyDataSetChanged(); 
} 

} 

Hier die Adapterklasse:

public class Adapterrecharge extends RecyclerView.Adapter<Adapterrecharge.MyViewHolder> { 

private List<GetRecharge> rechargeList; 

public class MyViewHolder extends RecyclerView.ViewHolder { 
    public TextView title; 
    ImageView image; 

    public MyViewHolder(View view) { 
     super(view); 
     title = (TextView) view.findViewById(R.id.title); 
    } 
} 

public Adapterrecharge(List<GetRecharge> rechargeList) { 
    this.rechargeList = rechargeList; 
} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.rechargelist, parent, false); 

    return new MyViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) { 
    GetRecharge recharge = rechargeList.get(position); 
    holder.title.setText(recharge.getTitle()); 
} 

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

Ich scheine das richtige Layout zu aufblasen, aber immer noch den Fehler. hier ist der logcat Fehler

java.lang.NullPointerException 
    at com.example.aadesh.walletuncle.Adapterrecharge.onBindViewHolder(Adapterrecharge.java:53) 
    at com.example.aadesh.walletuncle.Adapterrecharge.onBindViewHolder(Adapterrecharge.java:21) 

hier ist die recyclerview Artikel Layout.

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/text"/> 

hier ist das Hauptlayout

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

<android.support.v7.widget.Toolbar 
    android:id="@+id/my_toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    android:elevation="4dp" 
    android:theme="@style/ThemeOverlay.AppCompat.ActionBar" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> 

    <TextView 
     android:text="Recharge" 
     android:textAppearance="@style/Base.TextAppearance.AppCompat.Large" 
     android:textColor="#ffffff" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/textView4" 
     android:layout_weight="1" /> 



</android.support.v7.widget.Toolbar> 

<android.support.v7.widget.RecyclerView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scrollbars="vertical" 
    android:id="@+id/recyclerview1"> 


</android.support.v7.widget.RecyclerView> 

+0

posten Sie Ihre logcat wo Fehler – rafsanahmad007

+0

auftritt Ich denke, es ist kein Problem in Ihrem Code ist.Aber ich bezweifle in Recyclerview Artikel Layout so können Sie bitte Ihre recyclerview Artikellayout –

+0

Ich habe die Xml als auch –

Antwort

-1

gibt es einige Probleme

  1. Sie bevölkern prepareRechargeData() Listendaten nach yo u haben Ihre Adapter-Set - so Ihre Liste rechargelist hat keine Daten

  2. in Ihrem onCreateViewHolder() Ihre falschen Layout R.layout.rechargelist

  3. Ihrer Ansicht Halter verwenden Sie falsch-ID für Textview geben R.id.title

versuchen Sie dies:

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    Toolbar myToolbar = (Toolbar) getActivity().findViewById(R.id.my_toolbar); 
    ((AppCompatActivity) getActivity()).setSupportActionBar(myToolbar); 

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

    recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerview1); 
    recyclerView.setHasFixedSize(true); 

    final FragmentActivity c = getActivity(); 

    layoutManager = new LinearLayoutManager(c); 
    recyclerView.setLayoutManager(layoutManager); 

    /*recyclerView.setItemAnimator(new DefaultItemAnimator()); 
    recyclerView.setAdapter((RecyclerView.Adapter) adapter);*/ 

    prepareRechargeData(); 
    adapter = new Adapterrecharge(rechargeList); 
    recyclerView.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 

    return rootView; 

} 

ändern Sie Ihre Adapter an:

public class Adapterrecharge extends RecyclerView.Adapter<Adapterrecharge.MyViewHolder> { 

private List<GetRecharge> rechargeList; 

public class MyViewHolder extends RecyclerView.ViewHolder { 
    public TextView title; 
    ImageView image; 

    public MyViewHolder(View view) { 
     super(view); 
     title = (TextView) view.findViewById(R.id.text); 
    } 
} 

public Adapterrecharge(List<GetRecharge> rechargeList) { 
    this.rechargeList = rechargeList; 
} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.recyclerview_item_layout, parent, false); 

    return new MyViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) { 
    GetRecharge recharge = rechargeList.get(position); 
    holder.title.setText(recharge.getTitle()); 
} 

@Override 
public int getItemCount() { 
    return rechargeList.size(); 
} 
} 
+0

jetzt gepostet bekomme ich null Zeiger Ausnahme in dieser Zeile 'adapter.notifyDataSetChanged();' –

+0

Ich habe die Antwort bearbeitet .. – rafsanahmad007

+0

remove adapter.notifyDataSetChanged(); in prepareRechargeData() Methode .. – rafsanahmad007

0

Sie sind nicht übereinstimmende ID von Textview. Statt

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/text"/> 
</LinearLayout> 

verwenden

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/title"/> 
</LinearLayout> 

Wie Sie falsche ID von Textview in MyViewHolder Klasse verwenden.

0

Das Problem ist auf Mismatch-IDs zurückzuführen. Die ID von TextView in XML ("Text") und die in der ViewHolder-Klasse aufgeblähte ("Titel") sind unterschiedlich.

<TextView 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:id="@+id/text"/> 

Adapter Klasse

public MyViewHolder(View view) { 
    super(view); 
    title = (TextView) view.findViewById(R.id.title); 
} 
Verwandte Themen