【问题标题】:how to show list view record from sqlite into second listview on setOnItemClickListener如何在 setOnItemClickListener 上将 sqlite 的列表视图记录显示到第二个列表视图中
【发布时间】:2016-01-21 14:04:03
【问题描述】:

我已经创建了列表视图,我想要做的是当用户点击第一个列表视图时,该特定字段的选定记录应该显示在第二个列表视图中,

在我的代码中,我只是获取第一个列表视图的项目位置,然后将该列表视图的选定项目传递到我的第二个活动中,我不知道接下来要做什么

所以请给我代码/想法,因为我是 android 新手..

这是我的代码

MainActivity:(第一个列表视图)

    listView= (ListView) findViewById(R.id.listView);
dbHelper = new SqlLiteDbHelper(this);
try {
    dbHelper.openDataBase();
} catch (SQLException e) {
    e.printStackTrace();
}

sqLiteDatabase=dbHelper.getReadableDatabase();
cursor=dbHelper.gettitles(sqLiteDatabase);

String[] from = new String[] { dbHelper.TITLE };
int[] to = new int[] {R.id.title };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.title_row,cursor,from,to);
adapter.notifyDataSetChanged();
listView.setAdapter(adapter);

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

         Cursor cursor =(Cursor) (listView.getItemAtPosition(position));
            String selectedItem = cursor.getString(0);
            Intent intent = new Intent(MainActivity.this, SubcategoryActivity.class);
            intent.putExtra("selectedItem", selectedItem);
            startActivity(intent);
    }
});

MainActivity Xmlcode:(Firstlistview)

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

Title_row.xml
 <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/title"
        android:layout_gravity="center_horizontal" />

第二个活动:(第二个列表视图) listView2= (ListView) findViewById(R.id.listView2);

    final String selectedData = intent.getStringExtra("selectedItem");
    dbHelper = new SqlLiteDbHelper(this);
    try {
        dbHelper.openDataBase();
    } catch (SQLException e) {
        e.printStackTrace();
    }

    sqLiteDatabase=dbHelper.getReadableDatabase();
    cursor=dbHelper.getsubcategory(sqLiteDatabase,selectedData);
    String[] from = new String[] { dbHelper.SUBCATEGORY };
    int[] to = new int[] {R.id.subcategory };
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.subcategory_row,cursor,from,to);
    adapter.notifyDataSetChanged();
    listView2.setAdapter(adapter);

子类别 Xml 文件:

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

subcategory_row.xml
 <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/subcategory"
        android:layout_gravity="center_horizontal" />

数据库类:

public Cursor gettitles(SQLiteDatabase db)
    {
        db = this.getReadableDatabase();
        Cursor cursor;
        cursor = db.query(true, "record", new String[]{TITLE,ITEMNO + " as _id"}, null, null, TITLE, null, null, null);
        if (cursor != null) {
            cursor.moveToFirst();
        }
        return cursor;
    }

     public Cursor getsubcategory(SQLiteDatabase db,String sub)
    {
        db=this.getReadableDatabase();
        Cursor cursor;
        cursor = db.query("record",new String[]{SUBCATEGORY},TITLE + "=" +sub,null,null,null,null);
        return cursor;
    }

Logcat:

Caused by: android.database.sqlite.SQLiteException: near "FOOD": syntax error (code 1): , while compiling: SELECT subcategory FROM record WHERE title=GENERAL FOOD TIPS
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1113)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:690)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
        at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
        at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1448)
        at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1295)
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1166)
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1334)
        at com.example.aeiltech.sidd.SqlLiteDbHelper.getsubcategory(SqlLiteDbHelper.java:118)
        at com.example.aeiltech.sidd.SubcategoryActivity.onCreate(SubcategoryActivity.java:38)

【问题讨论】:

  • 实际上你的数据集是什么?能否提供 SimpleCursorAdapter 的代码?
  • 它只是一个简单的 TextView
  • “to”和“from”是什么?
  • 我在数据库中获取标题列名并将其传递给该活动中的另一个活动我只有一个简单的 Textview
  • @HariKrishnan 检查我更新的代码

标签: android sqlite listview


【解决方案1】:

我不太确定您想要做什么,但是我在您的代码中看到两个错误,这可能有助于解决问题。如果没有,请提供更易于理解的问题描述。

  1. 在 onItemClickListener 中,您尝试将项目从列表转换为字符串。但是,方法 getItemAtPosition(position) 将传递给适配器的函数 getItem(position),在您的情况下,它将返回一个光标。您不能将光标转换为字符串。因此,您在此位置的代码应如下所示:

    Cursor cursor =(Cursor) (listView.getItemAtPosition(position));
    String selectedItem = cursor.getString(0);
    
  2. 在您的第二个列表视图中,您有以下函数调用:

    cursor=dbHelper.getsubcategory(sqLiteDatabase,sub);
    

    但是我看不到您在哪里定义 sub。阅读您的代码后,我的最佳猜测是 sub 应该是第一个列表视图中的选定标题。因此,此调用应如下所示:

    cursor=dbHelper.getsubcategory(sqLiteDatabase,selectedData);
    

【讨论】:

  • 谢谢,但我正在寻找这样的[我需要这样,但我想从数据库中获取它][1]:i.stack.imgur.com/i5OAB.png
  • 在我的数据库中,我有列名称,如标题、子类别和详细信息...我正在尝试在列表视图中显示我的所有列名称..首先我显示我的标题列名称..现在我正在尝试显示我的子类别列名称..子类别将根据标题 @findsul 的选择显示
  • 更新您的代码后,我的应用程序崩溃了,它在 Subcategoryclass @findsul 上显示 java.lang.NullPointerException
  • 我更新了我的代码请检查@findsul
  • 看到你的照片后,我明白我理解你的问题了:) NullPointerException 在哪一行?是不是在这里: final String selectedData = intent.getStringExtra("selectedItem");你必须像这样初始化意图: Intent intent = getIntent();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多