为什么我的光标在我的ListView中无效?

时间:2015-12-14 14:47:44

标签: java android listview android-listview cursor

我想用我的ListView上点击的项目替换我的EditTexts。我使用光标移动ListView上的项目。但是,即使我单击其上的第二个项目,第一个项目也会显示出来。我做错了什么?

这是我的ListView onItemClicked代码:

lv_people_info.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override           
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // TODO Auto-generated method stub
            people_info2 = new ArrayList<String>();


            Cursor cursor2 = db.query(PeopleEntry.TABLE_NAME,// Table
                    allColumns, // The columns to return
                    null, // The columns for the WHERE clause
                    null, // The values for the WHERE clause
                    null, // don't group the rows
                    null, // don't filter by row groups
                    null, // The sort order
                    null); // Limits the number of rows returned by the  query  

            cursor2.moveToFirst();

            while (!cursor2.isAfterLast()) {
                people_info2.add(cursor2.getString(1));
                people_info2.add(cursor2.getString(2));
                people_info2.add(cursor2.getString(3));

                et_name.setText(people_info2.get(0));
                et_amount.setText(people_info2.get(1));
                et_description.setText(people_info2.get(2));

                cursor2.moveToNext();

            }

            cursor2.close();
        }

    });

单击ListView的第二行时会发生以下情况:

enter image description here

2 个答案:

答案 0 :(得分:0)

  

我想用我的ListView上点击的项目替换我的EditTexts。

嗯,这是你应该做的而不是使用光标。您的列表视图已经填充了Cursor.的数据,因此无需再次查询!

只需从行中onClickListener()收到必要的信息。

您可以使用ViewHolder模式。创建名为ViewHolder的简单类,保留对您的名称,数量,描述字段的引用。然后在您的newView()方法中创建新的ViewHolder,并使用setTag()将其附加到您的视图中。

bindview()中绑定数据。然后,在OnClickListenergetTag()使用view

你可以在https://developer.android.com/training/improving-layouts/smooth-scrolling.html

看到很好的例子

不要在UI线程中查询数据库!在OnClick方法中查询数据库是一个错误。如果您在阅读完文章后仍想查询数据库,请至少使用CursorLoaderAsyncTask

答案 1 :(得分:-1)

以下代码可能正常工作..

Inside Listview clickevent

private SQLiteDatabase myDataBase=myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
String sql=select name,amount,description from yourTableName 
Cursor cr = myDataBase.rawQuery(sql, null);

现在你在这里添加

 people_info2.add(cr .getString(1));
 people_info2.add(cr .getString(2));
 people_info2.add(cr .getString(3));

 et_name.setText(people_info2.get(0));
 et_amount.setText(people_info2.get(1));
 et_description.setText(people_info2.get(2));