【问题标题】:Cursor adapter and SQLite solution with Fragments光标适配器和带有片段的 SQLite 解决方案
【发布时间】:2016-03-22 19:47:58
【问题描述】:

我是一个非常新手的 Android 开发人员,正在开发一个非常简单的应用程序,该应用程序从 SQLite 数据库读取条目并将它们映射到 ListView,每当单击“列出所有”按钮时显示 CUSTOMER_NAME 字段。我一直在关注一堆不同的教程,但一直遇到范围问题。

编辑::如何继续完成从光标到 ListView 的映射?

非常感谢您提供的任何帮助!

到目前为止,我的 DBHelper,getAllCustomer 方法如下所示:

public Cursor getAllCustomers(){
    List<Customer> customers=new LinkedList<Customer>();

    String query="SELECT * FROM "+TABLE_NAME;

    SQLiteDatabase db=this.getWritableDatabase();
    Cursor cursor= db.rawQuery(query, null);

    return cursor;
}

我的 fragment_list.xml 看起来像(参见 ListView):

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="List Customers"
        android:id="@+id/textView3"
        android:layout_gravity="center_horizontal" />

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="381dp"
        android:layout_centerHorizontal="true"
        android:layout_alignParentTop="true"
        android:id="@+id/listView"
        android:layout_above="@+id/btnAdd" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="List All"
        android:id="@+id/btnGetAll"
        android:layout_alignParentBottom="true"
        android:layout_toRightOf="@+id/btnAdd" />

</LinearLayout>

最后是我的 CustomersFragment.java

public class CustomersFragment extends Fragment {

public CustomersFragment() {

}

public static CustomersFragment newInstance() {
    CustomersFragment fragment = new CustomersFragment();
    Bundle args = new Bundle();
    fragment.setArguments(args);
    return fragment;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_search, container, false);
    return rootView;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    Button bGetAll = (Button) getActivity().findViewById(R.id.btnGetAll);
    bGetAll.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            CustomerrDBSetup db = new CustomerrDBSetup(getActivity());
            Cursor cursor = db.getAllCustomers();
            String[] from = new String[] { "customer_name" };

        }
    });
  }
}

【问题讨论】:

  • 你的问题是什么?
  • 对不起,我刚刚更新了

标签: java android sqlite listview android-fragments


【解决方案1】:

你的函数应该是这样的

public List<Customer> getAllCustomers(){
    List<Customer> customers = new LinkedList<Customer>();
    String query="SELECT * FROM " + TABLE_NAME;
    SQLiteDatabase db=this.getWritableDatabase();
    Cursor cursor= db.rawQuery(query, null);

    if (cursor.moveToFirst()) {
            do {
                Customer customer = customerFromCursor(cursor);
                customers.add(cutomer);
            } while (cursor.moveToNext());
        }

    //don't forget to close cursor after use it

    if (cursor != null) {
            cursor.close();
        }

    return customers;
}


public Customer customerFromCursor(Cursor cursor){
    Customer ret = new Customer();

    //put your getter here

    //ex:
    ret.setName(cursor.getString(cursor.getColumnIndex(yourColumName)));

    //.....
    return ret;
  }

通过这种方式,您将获得列表视图的所有数据

【讨论】:

  • 感谢您的回复。不过,我该如何通过 ArrayAdapter 绑定这些数据?
  • here 你可以找到很好的教程如何做到这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-28
  • 2016-12-13
  • 1970-01-01
相关资源
最近更新 更多