Java Android:将简单光标链接到listview

Java Android:将简单光标链接到listview,java,android,sqlite,android-listview,Java,Android,Sqlite,Android Listview,我已经有了如何从sqlite数据库获取数据的基本前提,我已经有了记录返回到logcat的项目的基本前提。但是,我似乎无法找到将数据输出到listview的最佳方法 起初,我认为我应该将数据放入一个数组中,并使用该数组设置一个listview,但是环顾四周,您可以将光标作为数据源直接链接到listview,但我不能完全理解它 这是我的MainActivity(一旦我进一步计算了它,我会将sql放入它自己的helper类中,但现在它都来自于MainActivity) 我的主要活动是: public

我已经有了如何从sqlite数据库获取数据的基本前提,我已经有了记录返回到logcat的项目的基本前提。但是,我似乎无法找到将数据输出到listview的最佳方法

起初,我认为我应该将数据放入一个数组中,并使用该数组设置一个listview,但是环顾四周,您可以将光标作为数据源直接链接到listview,但我不能完全理解它

这是我的MainActivity(一旦我进一步计算了它,我会将sql放入它自己的helper类中,但现在它都来自于MainActivity)

我的主要活动是:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

       SQLiteDatabase db = openOrCreateDatabase("MyDB", MODE_PRIVATE, null);
       Cursor c = db.rawQuery("SELECT * FROM MyTable", null);
       c.moveToFirst();
       Log.e("TomDebug", c.getString(c.getColumnIndex("FirstName")));
       db.close();

    }

}
我的布局activiy_main.xml是:

<RelativeLayout 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"
    android:gravity="fill" >

    <ListView
        android:id="@+id/derooms"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >
    </ListView>

</RelativeLayout>

我的表有三列,但现在我很乐意将数据库中的所有名字都输出到列表视图中


汤姆,你需要一个游标适配器。看


您可以使用SimpleCorsorAdapter开始。如果您的目标是11+,那么您需要查看一下

您似乎还没有在listview中编码任何行,您的问题不应该得到回答,因为您在贡献方面的努力很弱。无论如何,以下是答案的演示代码(并非完全满足您的要求):

(1) 创建
list\u view\u item.xml
以在列表视图中显示您的信息,例如:a以显示您的数据字段

(2) 创建
DataBoundAdapter
以绑定到DB游标的结果:

public class DataBoundAdapter extends CursorAdapter 
{
    Context _context;

    public DataBoundAdapter(Context context, Cursor c, boolean autoRequery) {
        super(context, c, autoRequery);
        _context = context;
    }

    @Override
    public void bindView(View view, Context c, Cursor cur) 
    {
        // TODO: handle data when binding to your list view
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) 
    {
        int item_view_id = R.layout.list_view_item;

        //inflate item view to list view holder
        LinearLayout holderView = new LinearLayout(_context);
        String inflaterName = Context.LAYOUT_INFLATER_SERVICE;
        LayoutInflater inflater = (LayoutInflater) _context.getSystemService(inflaterName);
        inflater.inflate(item_view_id, holderView, true);

        return holderView;
    }
}
(3) 在
MainActivity.onCreate(..)
中:


另外,在listview可见时不要关闭数据库。非常感谢您的帮助,开尔文,非常感谢
ListView myListView = (ListView)findViewById(R.id.derooms);
DataBoundAdapter dbAdapter = new DataBoundAdapter(this, your_db_cursor, true);
myListView.setAdapter(dbAdapter);