NullPointerException:在片段中调用 setAdapter Class
NullPointerException: Calling setAdapter in Fragment Class
我正在尝试使用片段 class 创建一个 RelativeLayout,但是当我在 populateListView 函数中调用 ListView setAdapter 方法时,我有一个 java.lang.NullPointerException,但我找不到问题所在用我的代码。谢谢!!
我的片段Class
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","01234242143",1,R.drawable.productt));
product.add(new Product("Prod_2","012313123112",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;
}
}
}
这是我的 xml 文件,其中包含 allproductinfridge 布局:
<?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)
您必须膨胀您的视图,然后找到您的元素:
View rootView = inflater.inflate(R.layout.allproductinfridge, container, false);
ListView list = (ListView) rootView.findById(R.id.AllProdlistView);
//Now you can set your adapter
验证您的 onCreateView() 方法。您正在调用 populateListView() 之后,您 return 通过执行
来创建一个全新的膨胀布局
return inflater.inflate(R.layout.allproductinfridge, container, false);
您应该做的是在您的 onCreateView() 中。
首先膨胀视图并将其保存在变量中。设置必要的适配器/侦听器,然后 return 视图。
设置按钮侦听器的示例 - 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;
}
视图先膨胀。然后在膨胀视图中找到必要的组件(按钮或列表视图)并设置侦听器/适配器,然后 return 视图。
我正在尝试使用片段 class 创建一个 RelativeLayout,但是当我在 populateListView 函数中调用 ListView setAdapter 方法时,我有一个 java.lang.NullPointerException,但我找不到问题所在用我的代码。谢谢!!
我的片段Class
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","01234242143",1,R.drawable.productt));
product.add(new Product("Prod_2","012313123112",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;
}
}
}
这是我的 xml 文件,其中包含 allproductinfridge 布局:
<?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)
您必须膨胀您的视图,然后找到您的元素:
View rootView = inflater.inflate(R.layout.allproductinfridge, container, false);
ListView list = (ListView) rootView.findById(R.id.AllProdlistView);
//Now you can set your adapter
验证您的 onCreateView() 方法。您正在调用 populateListView() 之后,您 return 通过执行
来创建一个全新的膨胀布局return inflater.inflate(R.layout.allproductinfridge, container, false);
您应该做的是在您的 onCreateView() 中。 首先膨胀视图并将其保存在变量中。设置必要的适配器/侦听器,然后 return 视图。
设置按钮侦听器的示例 - 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;
}
视图先膨胀。然后在膨胀视图中找到必要的组件(按钮或列表视图)并设置侦听器/适配器,然后 return 视图。