2016-07-14 153 views
1

有人能幫助我知道發生了什麼,在RecyclerView致命異常:主要

Adapter1.java:48 

已造成我recyclerview這個錯誤我試圖改變變量名,但它仍然給了我同樣的錯誤。

java.lang.NullPointerException 
at ke.co.clickaway.squirrel.clickawaytechnologies.adpter.Adapter1.getItemCount(Adapter1.java:48) 

的代碼如下

public class MainActivity extends AppCompatActivity { 
    Toolbar toolbar; 
    ArrayList<DataList> list; 
//in the onCreate Bundle 
RecyclerView rview=(RecyclerView) findViewById(R.id.rview); 
     Adapter1 adapter1=new Adapter1(this,list); 
     rview.setAdapter(adapter1); 
     StaggeredGridLayoutManager lm=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL); 
     rview.setLayoutManager(lm); 

信息類

public class DataList { 
    public int imageView; 
    public String title; 

    public static List<DataList> getData(){ 
     ArrayList<DataList> mList=new ArrayList<>(); 
     int[] imag={R.drawable.web_ic,R.drawable.palette_ic,R.drawable.pencil,R.drawable.sware_ic,R.drawable.phone_ic}; 
     String[] lable={"Web Development","Branding","Graphic Design","Systems","Mobile Apps"}; 
     for(int i=0;i<lable.length&& i<imag.length;i++){ 
      DataList dataList=new DataList(); 
      dataList.title=lable[i]; 
      dataList.imageView=imag[i]; 
      mList.add(dataList); 
     } 
     return mList; 
    } 
} 

和我的適配器

public class Adapter1 extends RecyclerView.Adapter<Adapter1.ViewHolder> { 
    private List<DataList> mList; 
    private Context mContext; 
    public Adapter1(Context context,List<DataList> list){ 
      mList=list; 
      mContext=context; 
    } 
    private Context getContext(){ 
     return mContext; 
    } 
    @Override 
    public Adapter1.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     Context context=parent.getContext(); 
     LayoutInflater inflater=LayoutInflater.from(context); 
     View customView=inflater.inflate(R.layout.custom_view,parent,false); 
     ViewHolder viewHolder=new ViewHolder(customView); 
     return viewHolder; 

    } 

    @Override 
    public void onBindViewHolder(Adapter1.ViewHolder holder, int position) { 
     DataList dataList=mList.get(position); 
     holder.imag.setImageResource(dataList.imageView); 
     holder.lable.setText(dataList.title); 
     } 

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

    public class ViewHolder extends RecyclerView.ViewHolder { 
     public ImageView imag; 
     public TextView lable; 

     public ViewHolder(View itemView) { 
      super(itemView); 
      imag= (ImageView)itemView.findViewById(R.id.imageView1); 
      lable=(TextView)itemView.findViewById(R.id.textView1); 
     } 
    } 
} 

我的自定義視圖

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

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_gravity="center" 
     android:layout_width="88dp" 
     android:layout_height="88dp" 
     android:layout_marginTop="5dp" 
     android:layout_marginBottom="5dp" 
     android:src="@drawable/one" /> 
    <TextView 
     android:id="@+id/textView1" 
     android:layout_gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="15dp" 
     android:layout_marginTop="5dp" 
     android:layout_marginBottom="5dp" 
     android:text="dummy Text" /> 
</LinearLayout> 

在activty_main.xml

<android.support.v7.widget.RecyclerView 
     android:layout_below="@id/appbarlayout" 
     android:id="@+id/rview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

回答

0

的RecyclerView片斷嘗試添加以下代碼:

list = Datalist.getData(); 

在此之前:

Adapter1 adapter1=new Adapter1(this,list); 
+0

難道不我必須有一個用於數據的獲取方法從我的DataList –

+0

嘿非常感謝它的工作我合併後你的答案與@ casabapap的答案.... –

0

根據你的代碼列表是null,所以不要使用ArrayList<DataList> listMainActivity使用ArrayList<DataList> list = new ArrayList<>()ArrayList<DataList> list = DataList.getData()

1

列表爲空。您創建適配器或適配器改變getItemCount()方法來此之前,所以初始化列表:

@Override 
public int getItemCount() { 
    return mList == null ? 0 : mList.size(); 
} 
+0

嘿,我只是試過,但它仍然給我同樣的問題... –

+0

嘿,非常感謝,我結合你的答案與鋁Zills答案它跑得這麼順利非常感謝... –

+0

in getData()方法有一個初始化,所以它永遠不會返回null,更糟糕的是空列表。 – faruk