【问题标题】:Android: Linking a simple cursor to listviewAndroid:将简单的光标链接到列表视图
【发布时间】:2012-09-04 12:03:25
【问题描述】:

我已经掌握了如何从 sqlite db 获取数据的基本前提,并且我已经得到了它来记录返回到 logcat 的项目。但是,我似乎无法找到将该数据输出到列表视图的最佳方法。

起初我以为我会将数据放入一个数组中,并使用该数组设置一个列表视图,但是环顾四周,您可以将光标直接作为数据源链接到列表视图,但我不太明白我的绕过它。

这是我的 MainActivity(一旦我更详细地解决了它,我会将 sql 放入它自己的帮助程序类中,但现在它全部来自主要活动)

我的主要活动是:

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>

我的表有三列,但现在我很高兴它只是将数据库中的所有名字都喷到一个列表视图中

汤姆

【问题讨论】:

    标签: java android sqlite android-listview


    【解决方案1】:

    您的列表视图似乎没有编写任何行,由于您的贡献不足,您的问题不应该得到回答。无论如何,这是答案的演示代码(不是完全满足您的所有要求):

    (1) 创建list_view_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 myListView = (ListView)findViewById(R.id.derooms);
    DataBoundAdapter dbAdapter = new DataBoundAdapter(this, your_db_cursor, true);
    myListView.setAdapter(dbAdapter);
    

    【讨论】:

    • 非常感谢 Kelvin 的帮助,不胜感激
    【解决方案2】:

    您需要一个 CursorAdapter。见http://developer.android.com/reference/android/widget/CursorAdapter.html

    您可以使用 SimpleCursorAdapter 开始。如果你的目标是 11 岁以上,你会想看看http://developer.android.com/reference/android/content/CursorLoader.html

    【讨论】:

    • 另外,当你的列表视图可见时不要关闭你的数据库。
    猜你喜欢
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    相关资源
    最近更新 更多