Java 如何根据与字符串的相关性组织listview?
我想知道如何根据与字符串的相关性来组织我的listview?这在Android中可能吗 因此,让我们假设我的结果是: “你好” “上帝保佑H” “在那里找到你好” 字符串是“嗨” 它将根据与字符串的相关性进行组织 编辑1: listview的自定义阵列适配器:Java 如何根据与字符串的相关性组织listview?,java,android,listview,Java,Android,Listview,我想知道如何根据与字符串的相关性来组织我的listview?这在Android中可能吗 因此,让我们假设我的结果是: “你好” “上帝保佑H” “在那里找到你好” 字符串是“嗨” 它将根据与字符串的相关性进行组织 编辑1: listview的自定义阵列适配器: public class MyAdapter extends ArrayAdapter<AdapterItem> { private List<AdapterItem> items = new ArrayL
public class MyAdapter extends ArrayAdapter<AdapterItem> {
private List<AdapterItem> items = new ArrayList<AdapterItem>();
public MyAdapter(Context context, int textviewid) {
super(context, textviewid);
}
public void addAdapterItem(AdapterItem item) {
items.add(item);
}
public int getCount() {
return items.size();
}
@Override
public AdapterItem getItem(int position) {
return ((null != items) ? items.get(position) : null);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent){
View rowView = getLayoutInflater().inflate(R.layout.itemview, null);
TextView firstTextView = (TextView) rowView.findViewById(R.id.txtTitle);
firstTextView.setText(items.get(position).first);
// do the same with second and third
return rowView;
}
}
公共类MyAdapter扩展了ArrayAdapter{
私有列表项=新的ArrayList();
公共MyAdapter(上下文,int textviewid){
super(上下文,textviewid);
}
公共无效addAdapterItem(AdapterItem项目){
项目。添加(项目);
}
public int getCount(){
返回items.size();
}
@凌驾
公共适配器项getItem(内部位置){
return((null!=items)?items.get(position):null;
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
View rowView=GetLayoutFlater().充气(R.layout.itemview,null);
TextView firstTextView=(TextView)rowView.findViewById(R.id.txtTitle);
firstTextView.setText(items.get(position.first));
//对第二个和第三个也这样做
返回行视图;
}
}
我的比较器和适配器
public class TComparator implements Comparator<AdapterItem> {
private final Collator collator = Collator.getInstance();
public int compare(AdapterItem ob1, AdapterItem ob2) {
return collator.compare(ob1.first, string);
}
}
class AdapterItem {
public String first;
public String second;
public String third;
public int fourth;
public AdapterItem(String first, String second, String third, int fourth) {
this.first = first;
this.second = second;
this.third = third;
this.fourth = fourth;
}
}
公共类TComparator实现Comparator{
private final Collator Collator=Collator.getInstance();
公共整数比较(适配器项ob1、适配器项ob2){
返回collator.compare(ob1.first,string);
}
}
类适配器项{
公共字符串优先;
公共字符串第二;
公共字符串第三;
公共卫生服务;
公共适配器项(字符串第一、字符串第二、字符串第三、整数第四){
this.first=first;
这个秒=秒;
这个。三分之一=三分之一;
这个第四个=第四个;
}
}
您可以对相关性进行启发式,然后循环遍历适配器的元素,对它们进行评分,然后根据评分对它们进行排序,然后在适配器中重新排列它们(或者您可能必须创建一个新适配器),然后将listview设置为新适配器并进行更新
看起来好像有很多工作要做。。。有一些内置的方法可以猜测用户想要输入什么,其中一种是通过搜索界面:我在这里读到:
编辑:
实际上,如果使用ArrayAdapter,则有一个sort()方法,可以使用比较器对适配器进行排序:
您可以使用启发式作为比较器,并以这种方式对适配器进行排序
编辑2:
假设您的ArrayAdapter类型为T,即您的适配器如下所示:
ArrayAdapter<T> myAdapter = ...
这会对适配器进行排序我目前在自己的类中使用一个基本适配器,因为我在其中有多个项。有没有简单的方法把它转换成ArrayAdapter,这样我就可以很容易地对它进行排序ArrayAdapter是BaseAdapter的一个子类,因此,我只需将您现在使用的静态类型和实例化更改为ArrayAdapter,它就会工作。我知道了,在自定义数组适配器中有排序示例吗?我尝试过,但似乎不起作用:公共类TComparator实现Comparator{public int compare(AdapterItem ob1,AdapterItem ob2){if(ob1.first.compareTo(ob2.first)>0{return 1;}else if(ob1.first.compareTo(ob2.first)<0{return-1;}else{return 0;}它不起作用:也许你可以用实际的代码编辑你的原始问题。这会使阅读更容易,并且包括你的AdapterItem是什么
public class TComparator implements Comparator<T> {
public int compare(T ob1, T ob2) {
if (ob1 is more relevant than ob2) {
return 1;
} else if (ob1 is less relevant than ob2) {
return -1;
} else (ob1 is of equal relevance to ob2) {
return 0;
}
}
}
myAdapter.sort(new TComparator());