Android - 使用片段和简单游标适配器填充列表视图

时间:2013-02-25 22:24:29

标签: android android-listview android-fragments android-cursoradapter

我知道到目前为止,这个问题可能被问到了一百次,但我仍然无法解决我的问题。我有一个由2个片段组成的活动。一个片段是一个向数据库添加信息的表单:

**R.layout.fragment_add_server:**
<?xml version="1.0" encoding="utf-8"?>
...
<LinearLayout
    android:id="@+id/nameLinear"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dp"
    android:layout_marginLeft="5dp" >

    <TextView
        android:id="@+id/nameText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="70"
        android:text="@string/strName"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/editName"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="30"
        android:hint="@string/editName" />
</LinearLayout>
...

另一个片段只是一个列表视图。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/georgeback" 
android:orientation="vertical" >

<ListView
    android:id="@+id/listView1"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_weight="60" >
</ListView>

<Button
    android:id="@+id/connect"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:text="@string/connectBTN" />

</LinearLayout>

那个片段,列表视图,我希望用数据库中的任何内容填充它,并在添加新内容时自动刷新(尚未进入该阶段)。当我使用下面的代码时,我设法用整个片段填充listview(即我看到列表框,按钮等,我甚至可以与它们交互。开始。)而不仅仅是数据。

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

    View view = inflater.inflate(R.layout.fragment_select_server,
            container, false);
    Cursor mNotesCursor = mDbHelper.fetchAllNotes();
    String[] from = new String[]{mDbHelper.KEY_TITLE};
    int[] to = new int[]{R.id.editName};
    mCurAdapter = new SimpleCursorAdapter(view.getContext(),R.layout.fragment_add_server,mNotesCursor,from,to,0);

    mMyListView=(ListView)view.findViewById(R.id.listView1);
    mMyListView.setAdapter(mCurAdapter);

    return view;
}

我相信我对构造函数的from和to字段做错了。任何想法为什么我得到整个片段视图的输出而不仅仅是数据库中的数据?还有其他建议吗?

2 个答案:

答案 0 :(得分:0)

问题在于您传递片段布局而不是列表视图项布局。从我可以看到,您的列表视图项目包含在fragment_add_server.xml布局中(因为您在xml片段之前和之后放置了...)。将代码段移动到自己的文件中,例如my_list_view_item.xml,并在创建SimpleCursorAdapter时使用该文件。

mCurAdapter = new SimpleCursorAdapter(view.getContext(),R.layout.my_list_view_item,mNotesCursor,from,to,0);

答案 1 :(得分:0)

我通过改变simplecursoradapter中的布局解决了我遇到的问题。而不是

mCurAdapter = new SimpleCursorAdapter(view.getContext(),R.layout.fragment_add_server,mNotesCursor,from,to,0);
我做了:

mCurAdapter = new SimpleCursorAdapter(view.getContext(),android.R.layout.simple_list_item_1,mNotesCursor,from,to,0);

基本上将布局更改为通用的android列表布局就可以了! :)