【发布时间】:2018-08-13 06:20:54
【问题描述】:
我在从 Activity 用 bundle 填充的片段中有 listview,我有自定义 baseadapter 和带有图像和文本的自定义对象,listview 可以很好地处理图像和文本,但是当我使用 searchview 进行搜索时,我可以获得文本及其位置和 onclicklistener没问题没问题,问题是我不能有正确的项目(文本标题)的图像(徽标),图像是由它自己的位置而不是项目文本位置来划分的
首先是我的自定义对象
public class Channel {
public String name;
public String logoUrl;
public Channel(String name, String logoUrl) {
this.name = name;
this.logoUrl = logoUrl;
}
@Override
public String toString() {
return "Channel {" +
"name='" + name + '\'' +
", logoUrl='" + logoUrl + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLogoUrl() {
return logoUrl;
}
public void setLogoUrl(String logoUrl) {
this.logoUrl = logoUrl;
}
}
这是我的自定义基本适配器
public class ChannelAdapter extends BaseAdapter implements Filterable{
private Activity context;
private ArrayList<Channel> channelNames = new ArrayList<>(); //mList
private ArrayList<Channel> channelLogos = new ArrayList<>();
private ArrayList<Channel> tmpNames= null;
private ArrayList<Channel> tmpLogos= null;
private CustomFilter myFilter = new CustomFilter();
ColorSpace.Model model;
public ChannelAdapter(Context context, ArrayList<Channel> channels, ArrayList<Channel> logos){
this.context = (Activity) context;
this.channelNames = channels;
this.channelLogos = logos;
this.tmpNames = channels;
this.tmpLogos = logos;
// Names.addAll(channelLogos);
}
@Override
public int getCount() {
// return Names.size();
return tmpNames.size();
}
@Override
public String getItem(int position) {
return String.valueOf(tmpNames.get(position));
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row =null;
if(convertView==null) {
LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row=inflater.inflate(R.layout.custom_row,parent, Boolean.parseBoolean(null));
}else{
row=convertView;
}
TextView textView= (TextView) row.findViewById(R.id.textv);
ImageView image=(ImageView) row.findViewById(R.id.imageView);
textView.setText((CharSequence) tmpNames.get(position));
Picasso.with(context)
.load(String.valueOf(tmpLogos.get(position)))
.into(image);
return row;
}
@Override
public Filter getFilter() {
if (myFilter == null) {
myFilter = new CustomFilter();
}
return myFilter;
}
public class CustomFilter extends Filter{
@Override
protected FilterResults performFiltering(CharSequence constraint) {
// TODO Auto-generated method stub
String filterString = constraint.toString().toLowerCase();
FilterResults results = new FilterResults();
final ArrayList<Channel> list = channelNames; //remettre channelNames
int count = list.size();
final ArrayList<String> nlist = new ArrayList<String>(count);
String filterableString ;
for (int i = 0; i < count; i++) {
filterableString = String.valueOf(list.get(i));
if (filterableString.toLowerCase().contains(filterString)) {
nlist.add(filterableString);
}
}
results.values = nlist;
results.count = nlist.size();
return results;
}
@Override
protected void publishResults(CharSequence constraint,FilterResults results) {
// TODO Auto-generated method stub
// Names.clear();
// addAll((List<Channel>) results.values);
tmpNames = (ArrayList<Channel>) results.values;
notifyDataSetChanged();
}
}
}
最后是我的 OnqueryTextChange
@Override
public boolean onQueryTextChange(String newText) {
((ChannelAdapter)listView.getAdapter()).getFilter().filter(newText.toString());
}
});
如果可能,请需要帮助,并在此先感谢
【问题讨论】:
-
感谢您的快速回复,请提供一些来自带有 arraydapter 的 URL 的图像和文本的示例?
-
请pskink你有更多细节的例子吗?
-
谢谢,我会试试的
-
抱歉没办法让它工作,有什么建议或帮助吗?
-
你好 pskink,同样的问题,我无法使用文本项将图像置于良好位置,我也无法让 MatchableArrayAdapter 工作,我找不到修改 onBind 和匹配方法的方法,我现在对某人来说很容易,但我只是 android 开发的新手,当然如果可能的话,任何帮助都将不胜感激
标签: android listview fragment searchview