Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的光标不能在我的ListView中工作?_Java_Android_Listview_Android Listview_Cursor - Fatal编程技术网

Java 为什么我的光标不能在我的ListView中工作?

Java 为什么我的光标不能在我的ListView中工作?,java,android,listview,android-listview,cursor,Java,Android,Listview,Android Listview,Cursor,我想用在我的ListView上单击的项目替换我的EditText。我使用光标在ListView上沿项目移动。但是,即使我单击第二项,第一项也会显示出来。我做错了什么 以下是我的ListView代码: lv_people_info.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterVie

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

以下是我的ListView代码:

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的第二行时发生的情况:


下面的代码可以正常工作

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));
我想用在我的ListView上单击的项目替换我的EditText

这就是你应该做的,而不是使用光标。您的listview已经填充了来自游标的数据。所以真的没有必要再查询它了

只需在onClickListener中从行接收必要的信息

您可以使用ViewHolder图案。创建名为ViewHolder的简单类,保留对名称、金额和描述字段的引用。然后在newView方法中创建新的ViewHolder,并使用setTag将其附加到视图中

在bindview中,将数据绑定到它。然后,在OnClickListener中使用getTag from view

你可以在这里看到一个很好的例子


不要在UI线程中查询数据库!用OnClick方法查询数据库是一个错误。如果在阅读本文之后,您仍然希望查询数据库,至少使用CursorLoader或AsyncTask。

此代码应始终在任何行之后显示表中的最后一项click@Selvin实际上是第一个。视图设置为从数组开始的内容。是的,你是对的。。。关键是不需要使用int-position,即传递给onItemClick callbackUse的long-id来将主键绑定到ListView行。在您的ItemClickListener中,使用getTag并使用该id查询数据库。@KNeerajLal。。。为何不需要get/setTag答案是错误的问题,但是:获得增益。。。这甚至不会编译,因为文字不在aphostropes中。。。同样,这样的db.rawQuery与db.query相同,那么为什么它会有帮助呢?cr和.getString之间也有空格。在这个回答中,零努力被称为十亿猴子编程风格。没有必要使用OnClickListener,因为他使用的是ListView而不是RecyclerView。。。并且视图持有者应该只保留对DUM的引用!!!行中的视图,而不是数据。。。我想用在我的ListView上单击的项目替换我的EditText。prolly的意思是:我想将所选行中的数据绑定到EditTextsHi@RexSplode中,很抱歉,我对这一点非常陌生。因此,在创建ViewHolder类之后,如何将在ListView上单击的数据附加到ViewHolder?数据将附加到bindview方法中的行。在onClick中,只需调用getTag来接收ViewHolder实例。之后,您可以调用viewHolder.textView.getText来接收单击行中名称textView的文本。然后,editText.SetTextRetrieveString;