【问题标题】:Is there a way to search the results of search?有没有办法搜索搜索结果?
【发布时间】:2017-04-02 13:00:48
【问题描述】:

我需要知道我是否可以搜索搜索结果。例如,如果我有包含项目(香蕉奶昔、香蕉冰淇淋、苹果汁、香蕉汁、苹果派等)的列表视图,并且我在搜索视图中输入香蕉,那么结果是(香蕉奶昔、香蕉冰淇淋、香蕉汁)和与我之前的搜索相比,在我输入 JUICE 时还有另一个搜索,它会弹出 BANANA JUICE。我希望你能理解我,我希望有人能很快回答我这个问题。这是我的代码的样子。顺便说一句,我做了 2 个搜索视图,当我尝试这样做时,结果是(苹果汁,香蕉汁),因为搜索之间没有联系。 请帮忙。

public class recepies extends Activity {
ListView lv;
SearchView sv;
SearchView sv2;
String[] recepies={"Čili Piletina\n"+ " pileće belo meso \n"+" crvena      paprika \n"+" čili papričica \n"+" crveni pasulj \n"+" kukuruzni šećer \n"+" paradajz pelat\n"+" kisela pavlaka\n"+ " biljni začin\n "+ " biber\n "+" ulje ",
        "Prženija sa svinjskim butom\n" +" svinjski but\n"+" kiseli krastavčići\n , kisala paprika\n,tucana paprika,biljni začin,biber,origano ulje, so, lovorov list",
        "Peketići od integralnih palačinki\n" + "integralno brašno ,voda, soda bikarbona, ulje, kisela pavlaka, krastavac, paradajz, kikiriki",
        "Ćufte od mesa i karfiola (hrono recept)\n" + "mleveno meso, karfiol, crni luk, beli luk, peršun, belance, so, biber, kurkuma, ulje, tikvice, sok od paradajza",
        "Paprika punjena rižom i piletinom\n" +"paprika babura,belo meso,šargarepa,crni luk,pirinač,paradajz,sok od paradajza,biljnog začina,so,biber, kari,peršun, maslinovo ulje,",
        "Piletina u sosu od nara\n" +"belo meso,\n" + "soja sos,\n" + "biber,\n" + "kurkuma,\n" + "luk,\n" + "soka od nara,\n" + "đumbir,\n" + "pirinač,\n" + "čili ili tabasko sos,\n" + "bbq ili roštilj sos,"
};


ArrayAdapter<String> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_recepies);
    registerClickCallback();
    lv=(ListView) findViewById(R.id.listView);
    sv=(SearchView) findViewById(R.id.searchView1);
    sv2=(SearchView) findViewById(R.id.searchView2);
    adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,recepies);
    lv.setAdapter(adapter);
    sv2.setOnQueryTextListener(new OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String text) {
            // TODO Auto-generated method stub
            return false;
        }
        @Override
        public boolean onQueryTextChange(String text) {
            adapter.getFilter().filter(text);
            return false;
        }
    });
    sv.setOnQueryTextListener(new OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String text) {
            // TODO Auto-generated method stub
            return false;
        }
        @Override
        public boolean onQueryTextChange(String text) {
            adapter.getFilter().filter(text);
            return false;
        }
    });

}
private void registerClickCallback(){
    lv=(ListView) findViewById(R.id.listView);
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View viewClicked, int position, long id) {
                TextView textView= (TextView) viewClicked;
                if(position==0){
                    goToRecepie1();
                }else if(position==1){
                    goToRecepie2();
                }else if(position==2){
                    goToRecepie3();
                }else if(position==3){
                    goToRecepie4();
                }else if(position==4){
                    goToRecepie5();
                }else if(position==5){
                    goToRecepie6();
                }
        }
    });
}

private void goToRecepie6() {
    Intent intent = new Intent(this, Recepie6.class);

    startActivity(intent);
}

private void goToRecepie5() {
    Intent intent = new Intent(this, Recepie5.class);

    startActivity(intent);
}

private void goToRecepie4() {
    Intent intent = new Intent(this, Recepie4.class);

    startActivity(intent);
}

private void goToRecepie3() {
    Intent intent = new Intent(this, Recepie3.class);

    startActivity(intent);
}

private void goToRecepie2() {
    Intent intent = new Intent(this, Recepie2.class);

    startActivity(intent);
}

private void goToRecepie1() {
    Intent intent = new Intent(this, Recepie1.class);

    startActivity(intent);
}

}

【问题讨论】:

  • 您可以尝试将文本从 sv 前缀到 sv2 并以这种方式应用过滤器...
  • 不知道Filter是否会采用正则表达式。你可以试试。如果这不起作用,您可以在用项目填充 ArrayAdapter 时进行自己的过滤(使用正则表达式)。
  • 我使用了数组适配器和 simplelist1,这就是我的整个适配器代码 adapter=new ArrayAdapter(this, android.R.layout.simple_list_item_1,recepies); lv.setAdapter(适配器);
  • 如果你能修复我的代码,我将不胜感激,请按照我的解释进行
  • 我意识到我需要从 adapter.getFilter().filter(text);而不是从他们那里搜索,但不幸的是我不知道该怎么做

标签: java android android-studio search searchview


【解决方案1】:

为每次扫描您要扫描的列表中的每个元素制作一个。如果您使用数组,则只需检查第 n 个元素是否包含您正在搜索的单词

编辑:必须去掉“是”

【讨论】:

  • 谢谢伙计,我会努力做到的。
  • 如果可行,请随时点赞,让其他人看到! :)
  • 另外,如果您找到正确答案,请不要忘记将其标记为有效。这样,线程将被关闭,其他有相同问题的人也会有答案! :) 祝你好运
【解决方案2】:

这是一个不使用 XML 的示例。

List<String> menu = new ArrayList<String>();
List<String> filtered = new ArrayList<String>();
String found;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    menu.add("APPLE JUICE");
    menu.add("BANANA JUICE");
    menu.add("MANGO JUICE");
    menu.add("BANANA SMOOTHIE");
    menu.add("PINEAPPLE JUICE");
    menu.add("APPLE CIDER");
    menu.add("BANANA MILKSHAKE");

   for (int i =0;i < menu.size();i++)
   {
       if (menu.get(i).contains("BANANA"))
       {
           filtered.add(menu.get(i));
           Log.i("AppInfo","1st Filter Round: "+menu.get(i));
       }
   }

    for (int j = 0; j < filtered.size(); j++)
    {
        if (filtered.get(j).contains("JUICE"))
        {
            found = filtered.get(j);
            Log.i("AppInfo","Final Found: "+found);
        }
    }

}

只需将 for 循环中的 if 语句字符串替换为用户输入的字符串即可。我希望这会有所帮助

【讨论】:

    猜你喜欢
    • 2010-10-28
    • 1970-01-01
    • 2018-03-11
    • 2012-03-30
    • 2014-10-23
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多