android - 单击listView项目时如何在Searchview中设置文本
问题描述
我正在使用 SearchView。当我在 Searchview 中编写查询时,会出现一个项目列表(建议列表)。当我单击列表项时,列表项的文本不会显示在 Searchview 中。我已经尝试过建议侦听器,但应用程序通过此方法停止工作。如何在 SearchView 中显示单击项目的文本。我也试过 setquery() 但它只适用于第一个或一些项目,当我单击另一个项目时它会停止应用程序。当我删除 setQuery() 时它工作正常但名称未显示在 SearchView 中。这是代码的一部分。CustomAdapter.java
convertView.setOnClickListener(new View.OnClickListener() {
TextView txtView = (TextView) ((MainActivity)c).findViewById(R.id.textView);
@Override
public void onClick(View v) {
txtView.setText("");
SearchView sv=(SearchView) ((MainActivity)c).findViewById(R.id.sv);
sv.setQuery(""+planets.get(pos).getName(),false);
sv.clearFocus();
String d=planets.get(pos).getPrice();
int id1=planets.get(pos).getId();
String text=planets.get(pos).getName();
txtView.setText(id1 + System.getProperty ("line.separator") +text + System.getProperty ("line.separator") +d);
planets.clear();
v.setVisibility(View.GONE);
txtView.setVisibility(View.VISIBLE);
}
});
这是调试错误
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.tutorials.hp.sqlitefilterlistview, PID: 22679
java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:260)
at java.util.ArrayList.get(ArrayList.java:313)
at com.tutorials.hp.sqlitefilterlistview.mListView.CustomAdapter$1.onClick(CustomAdapter.java:106)
at android.view.View.performClick(View.java:5265)
at android.view.View$PerformClick.run(View.java:21534)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5728)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
I/Process: Sending signal. PID: 22679 SIG: 9
Disconnected from the target VM, address: 'localhost:8600', transport: 'socket'
它指向行 CustomAdapter.java(106) 这是
String d=planets.get(pos).getPrice();
我该如何解决这个问题?
解决方案
我也尝试过 setQuery() 但它仅适用于第一个或某些项目,当我单击另一个项目时它会停止应用程序。
是的,它看起来 setQuery(text, false)
就是您所需要的。现在,该应用程序适用于某些项目和其他崩溃的事实很可能与setQuery(..)
.
例如,如果pos
变量超出planets
列表大小的界限,则调用planets.get(pos)
将失败并显示IndexOutOfBoundsException
,但请检查堆栈跟踪,它会告诉您应用程序崩溃的确切原因。