Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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 - Fatal编程技术网

Java 如何根据与字符串的相关性组织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

我想知道如何根据与字符串的相关性来组织我的listview?这在Android中可能吗

因此,让我们假设我的结果是:

“你好” “上帝保佑H” “在那里找到你好”

字符串是“嗨”

它将根据与字符串的相关性进行组织

编辑1: listview的自定义阵列适配器:

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());