2015-10-22 161 views
2

我想创建一个使用片段类的RelativeLayout,但是当我在populateListView函数中调用ListView setAdapter方法时,我有一个java.lang.NullPointerException,并且我找不到是什么我的代码错了。谢谢!!NullPointerException:调用片段类中的setAdapter

我的片段类

public class ProductInFridge extends Fragment { 

private View rootView; 

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


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

    populateListView(); 

    return rootView; 

} 

private void populateListView() { 

    ArrayAdapter<Product> adapter = new MyListAdapter(getActivity(),R.layout.item_view, populateList()); 
    ListView list = (ListView) rootView.findViewById(R.id.AllProdlistView); 
    list.setAdapter(adapter); 

} 

private List<Product> populateList(){ 

    List<Product> product = new ArrayList<Product>(); 


    product.add(new Product("Prod_1","",1,R.drawable.productt)); 
    product.add(new Product("Prod_2","",2,R.drawable.productt)); 
    product.add(new Product("Prod_3","24234234242",3,R.drawable.productt)); 

    return product; 
} 


private class MyListAdapter extends ArrayAdapter<Product> { 


    private List<Product> prod; 


    public MyListAdapter(Context context, int view, List<Product> passedProd) { 

     super(context, view , passedProd); 

     prod = passedProd; 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View itemView; 




     itemView = getActivity().getLayoutInflater().inflate(R.layout.item_view,parent,false); 



     //Find the product 

     Product currentProd = prod.get(position); 



     //Fill the view 

     ImageView imageView = (ImageView)itemView.findViewById(R.id.imageView); 
     imageView.setImageResource(currentProd.getPhotoID()); 

     //Name 

     TextView nameTxt = (TextView)itemView.findViewById(R.id.item_txtName); 
     nameTxt.setText(currentProd.getName()); 

     //BarCode 

     TextView BarCodeTxt = (TextView)itemView.findViewById(R.id.item_txtBarCode); 
     BarCodeTxt.setText(currentProd.getBarCode()); 

     return itemView; 


    } 
} 
} 

这里是allproductinfridge布局我的XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#FFCC00" 
android:id="@+id/AllProd_layout"> 


<RelativeLayout 
    android:layout_width="200dp" 
    android:layout_height="match_parent" 
    android:background="#FFFFFFFF" 
    android:id="@+id/Category_list"> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/main_drawer" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:itemIconTint="@color/colorAccent" 
     app:itemTextColor="@color/colorTextSecondary" 
     app:menu="@menu/allproductmenu" /> 

</RelativeLayout> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/AllProductList" 
    android:layout_toRightOf="@+id/Category_list" 
    android:layout_toEndOf="@+id/Category_list"> 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/AllProdlistView" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 

</RelativeLayout> 

而且item_view:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" android:layout_height="match_parent"> 

<ImageView 
    android:layout_width="120dp" 
    android:layout_height="120dp" 
    android:id="@+id/imageView" 
    android:src="@drawable/productt" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="Product Name" 
    android:id="@+id/item_txtName" 
    android:layout_marginLeft="45dp" 
    android:layout_marginStart="45dp" 
    android:layout_marginTop="30dp" 
    android:textSize="30sp" 
    android:layout_alignParentTop="true" 
    android:layout_toRightOf="@+id/imageView" 
    android:layout_toEndOf="@+id/imageView" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:text="BarCode" 
    android:id="@+id/item_txtBarCode" 
    android:layout_below="@+id/item_txtName" 
    android:layout_alignLeft="@+id/item_txtName" 
    android:layout_alignStart="@+id/item_txtName" 
    android:layout_marginLeft="53dp" 
    android:layout_marginStart="53dp" /> 
</RelativeLayout> 

的Android的logcat :

01-02 01:20:21.410 3355-3355/slidenerd.vivz.navigationviewdemo E/AndroidRuntime: FATAL EXCEPTION: main 
01-02 01:20:21.410 3355-3355/slidenerd.vivz.navigationviewdemo E/AndroidRuntime: Process: slidenerd.vivz.navigationviewdemo, PID: 3355 
01-02 01:20:21.410 3355-3355/slidenerd.vivz.navigationviewdemo E/AndroidRuntime: java.lang.NullPointerException 
01-02 01:20:21.410 3355-3355/slidenerd.vivz.navigationviewdemo E/AndroidRuntime:  at slidenerd.vivz.navigationviewdemo.ProductInFridge.populateListView(ProductInFrid ge.java:44) 
01-02 01:20:21.410 3355-3355/slidenerd.vivz.navigationviewdemo E/AndroidRuntime:  at slidenerd.vivz.navigationviewdemo.ProductInFridge.onCreateView(ProductInFridge.java:34) 
01-02 01:20:21.410 3355-3355/slidenerd.vivz.navigationviewdemo E/AndroidRuntime:  at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789) 
+0

发布您的logcat输出.. –

回答

0

验证onCreateView()方法。您呼叫populateListView()和比后你做

return inflater.inflate(R.layout.allproductinfridge, container, false); 

返回一个全新的充气布局你应该做的,而不是在你的onCreateView()。 首先膨胀视图并将其保存在一个变量中。设置必要的适配器/侦听器,然后返回视图。

用于设置按钮听众一个例子 - Button Listener for button in fragment in android

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

     view = inflater.inflate(R.layout.smart_tv_controller_fragment, container, false); 
     upButton = (Button) view.findViewById(R.id.smart_tv_controller_framgment_up_button); 
     upButton.setOnClickListener(this); 
     return view; 
    } 

的视图被第一膨胀。然后在充气视图内找到必要的组件(按钮或列表视图)并设置监听器/适配器,然后返回视图。

+0

非常感谢!它的工作! –

0

您必须虚增您的视图,然后找到你的元素:

View rootView = inflater.inflate(R.layout.allproductinfridge, container, false); 
ListView list = (ListView) rootView.findById(R.id.AllProdlistView); 
//Now you can set your adapter 
+0

现在引发这个异常: ListView list =(ListView)rootView.findViewById(R.id.AllProdlistView); –

相关问题