谁能解决这个 ListView onItemClickListener 错误?在 searchView 中也出现错误
Posted
技术标签:
【中文标题】谁能解决这个 ListView onItemClickListener 错误?在 searchView 中也出现错误【英文标题】:Can anyone solve this ListView onItemClickListener Error? Also getting bug in searchView 【发布时间】:2022-01-22 05:05:15 【问题描述】:ItemModel.java
package com.example.poptunemusicplayer;
import java.io.Serializable;
public class ItemModel implements Serializable
private String name;
public ItemModel(String name)
this.name = name;
public String getName()
return name;
public void setName(String name)
this.name = name;
由于 String songName = (String) listView.getItemAtPosition(i); 在 listView.setOnItemClickListener 处出现错误;
MainActivity.java 中的代码
listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l)
String songName = (String) listView.getItemAtPosition(i);
startActivity(new Intent(getApplicationContext(), PlayerActivity.class)
.putExtra("songs", mySongs)
.putExtra("songname", songName)
.putExtra("position", i));
);
尝试在我的应用程序的 listView 中设置 onClick 但出现此错误
错误
E/androidRuntime: FATAL EXCEPTION: main
Process: com.example.poptunemusicplayer, PID: 7781
java.lang.ClassCastException: com.example.poptunemusicplayer.ItemModel cannot be cast to java.lang.String
at com.example.poptunemusicplayer.MainActivity$2.onItemClick(MainActivity.java:112)
at android.widget.AdapterView.performItemClick(AdapterView.java:350)
at android.widget.AbsListView.performItemClick(AbsListView.java:1674)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:4085)
at android.widget.AbsListView$10.run(AbsListView.java:6573)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:7025)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
我也实现了 serachView,但是在我在上面写了一些东西之后得到了错误的结果,并且在 onClick 上也得到了一些不同的结果。例如;
假设我的列表中有一些项目,例如:
给你 年轻 天文学 像你一样爱我 诚实 更接近如果我在搜索中输入“你”,它会给我结果:
给你 像你一样爱我它没有显示“年轻”,如果我点击“像你一样爱我”,那么它会显示“年轻”的数据。 既没有获取正确的数据,也没有获取正确的位置。
CustomAdapter 中的getFilter() 方法
@Override
public Filter getFilter()
Filter filter = new Filter()
@Override
protected FilterResults performFiltering(CharSequence constraint)
FilterResults filterResults = new FilterResults();
if (constraint == null | constraint.length() == 0)
filterResults.count = itemsModelsl.size();
filterResults.values = itemsModelsl;
else
List<ItemModel> resultModel = new ArrayList<>();
String searchStr = constraint.toString().toLowerCase();
for (ItemModel itemModel: itemsModelsl)
if (itemModel.getName().contains(searchStr))
resultModel.add(itemModel);
filterResults.count = resultModel.size();
filterResults.values = resultModel;
return filterResults;
@Override
protected void publishResults(CharSequence constraint, FilterResults results)
itemsModelListFiltered = (List<ItemModel>) results.values;
notifyDataSetChanged();
;
return filter;
OptionsMenu() 方法中的 SearchView 代码
case R.id.searchid:
SearchView searchView = (SearchView) item.getActionView();
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setQueryHint("Type here to search");
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener()
@Override
public boolean onQueryTextSubmit(String query)
return false;
@Override
public boolean onQueryTextChange(String newText)
customAdapter.getFilter().filter(newText);
return true;
);
return true;
我在这里缺少哪一步?
【问题讨论】:
添加了我的应用程序中出现的 SearchView 错误。 您好@Kalash8640,您应该创建一个关于搜索视图错误的单独问题:-) 【参考方案1】:从外观上看,您的ListView
适配器包含ItemModel
类的实例,而不仅仅是简单的String
s。
java.lang.ClassCastException: com.example.poptunemusicplayer.ItemModel 无法转换为 java.lang.String
要解决此问题,请更改此设置
String songName = (String) listView.getItemAtPosition(i);
到
ItemModel itemModel = (ItemModel) listView.getItemAtPosition(i);
String songName = itemModel.getName();
它应该不会再崩溃了。
我的建议是考虑使用RecyclerView
,但这是另一天的话题。
【讨论】:
感谢您的帮助,但我还需要帮助;以上是关于谁能解决这个 ListView onItemClickListener 错误?在 searchView 中也出现错误的主要内容,如果未能解决你的问题,请参考以下文章
如何从 ListControl(ListView) 中检索数据?
listview中单击RadioButton,并未触发listview的单击事件,怎样才能解决这个问题?