0

我正在为以下饮食做一个应用程序。我有一个列表视图中的片段:Android - 使用光标填充ListView

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    tools:context="com.example.b_gutowski.szama.ProductsFragment" 
    android:id="@+id/productsFragment"> 


    <ListView 
     android:id="@+id/productsList" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"></ListView> 

    <android.support.design.widget.FloatingActionButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|right" 
     android:layout_margin="16dp" 
     android:src="@drawable/ic_add" 
     android:onClick="addProductBtnClick" 
     app:backgroundTint="@color/accentColor" 
     app:layout_anchor="@id/productsList" 
     app:layout_anchorGravity="bottom|right|end" /> 


</android.support.design.widget.CoordinatorLayout> 

和我的数据库游标适配器:

public class ProductCursorAdapter extends CursorAdapter { 
public ProductCursorAdapter(Context context, Cursor c) { 
    super(context, c, 0); 
} 

@Override 
public View newView(Context context, Cursor cursor, ViewGroup viewGroup) { 
    return LayoutInflater.from(context).inflate(R.layout.product_item, viewGroup, false); 

} 

@Override 
public void bindView(View view, Context context, Cursor cursor) { 
    // Find fields to populate in inflated template 
    TextView productName = (TextView) view.findViewById(R.id.productName); 
    TextView productProteins = (TextView) view.findViewById(R.id.productProteins); 
    TextView productCarbs = (TextView) view.findViewById(R.id.productCarbs); 
    TextView productFat = (TextView) view.findViewById(R.id.productFat); 

    String name = cursor.getString(cursor.getColumnIndexOrThrow("productName")); 
    float proteins = cursor.getInt(cursor.getColumnIndexOrThrow("productProteins")); 
    float carbs = cursor.getInt(cursor.getColumnIndexOrThrow("productCarbs")); 
    float fat = cursor.getInt(cursor.getColumnIndexOrThrow("productFat")); 
    // Populate fields with extracted properties 
    productName.setText(name); 
    productProteins.setText(String.valueOf(proteins)); 
    productCarbs.setText(String.valueOf(carbs)); 
    productFat.setText(String.valueOf(fat)); 

} 

这是product_item的布局:

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

<TextView 
    android:id="@+id/itemName" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Nazwa" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

<TextView 
    android:id="@+id/itemProteins" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Białko" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

<TextView 
    android:id="@+id/itemCarbs" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Węglowodany" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

<TextView 
    android:id="@+id/itemFat" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Tłuszcz" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 
</LinearLayout> 

我试图从数据库中填充数据列表视图:

public class ProductsFragment extends Fragment { 


public ProductsFragment() { 
    // Required empty public constructor 
} 




@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    setHasOptionsMenu(true); 
    View rootView = inflater.inflate(R.layout.fragment_products, container, false); 
    DBHandler handler = new DBHandler(getActivity()); 
    SQLiteDatabase db = handler.getReadableDatabase(); 
    Cursor productsCursor = db.rawQuery("SELECT * FROM products", null); 
    ListView productsList = (ListView) rootView.findViewById(R.id.productsList); 


    ProductCursorAdapter cursorAdapter = new ProductCursorAdapter(getActivity(), productsCursor); 

    productsList.setAdapter(cursorAdapter); 

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

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.menu_products_meals, menu); 
    super.onCreateOptionsMenu(menu,inflater); 
} 
} 

我没有任何错误,但是listview是空的。我在Toast中发现光标内有数据。所以这是填充有问题,但我找不到答案。我从设备上下载数据库,结构很好。谢谢你的帮助。

+4

'回报rootView的;' – Sanoop

回答

1

这是片段onCreateView

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

如果你从这里返回查看,您稍后将onDestroyView()被释放视图时调用。

其中返回片段的用户界面视图,或null。

在你的情况你是返回一个新的视图对象

因此而不是返回

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

回报已经膨胀查看

return rootView;