2017-01-26 4 views
1

Мой полный проект - это как следует: есть список listView, связанный с базой данных, и опция поиска с предложением. Я хочу сдвинуть эту строку поиска в панель действий и отформатировать ее точно так же, как Панель поиска в Google Play Store. Пожалуйста, помогите мне, мои полные коды:Android: Добавить searchView на панели действий

MainActivity.java

package com.GurbaniAndSikh.MahaanKosh; 

import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.DefaultItemAnimator; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.SearchView; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 

import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.LinkedHashMap; 
import java.util.Map; 

/* 
* Created by GurbaniAndSikh 
*/ 

public class DictionaryMainActivity extends AppCompatActivity { 

    private static RecyclerView.Adapter adapter; 
    private RecyclerView.LayoutManager layoutManager; 
    private static RecyclerView recyclerView; 
    public static ArrayList<DictObjectModel> data; 
    DatabaseHelper db ; 
    ArrayList<String> wordcombimelist; 
    ArrayList<String> meancombimelist; 
    LinkedHashMap<String,String> namelist; 
    SearchView searchView; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 
     recyclerView.setHasFixedSize(true); 
     db= new DatabaseHelper(this); 
     searchView = (SearchView) findViewById(R.id.searchView); 
     searchView.setQueryHint("Search Here"); 
     searchView.setQueryRefinementEnabled(true); 
     layoutManager = new LinearLayoutManager(this); 
     recyclerView.setLayoutManager(layoutManager); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     data = new ArrayList<DictObjectModel>(); 
     fetchData(); 


     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) {return false; } 

      @Override 
      public boolean onQueryTextChange(String newText) { 


       newText = newText.toLowerCase(); 

       final ArrayList<DictObjectModel> filteredList = new ArrayList<DictObjectModel>(); 

       for (int i = 0; i < wordcombimelist.size(); i++) { 

        final String text = wordcombimelist.get(i).toLowerCase(); 
        if (text.contains(newText)) { 

         filteredList.add(new DictObjectModel(wordcombimelist.get(i),meancombimelist.get(i))); 
        } 
       } 
       adapter = new CustomAdapter(filteredList); 
       recyclerView.setAdapter(adapter); 


       return true; 
      } 
     }); 


    } 
    public void fetchData() 
    { 
     db =new DatabaseHelper(this); 
     try { 

      db.createDataBase(); 
      db.openDataBase(); 

     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 


     namelist=new LinkedHashMap<>(); 
     int ii; 
     SQLiteDatabase sd = db.getReadableDatabase(); 
     Cursor cursor = sd.query("Dictionary1" ,null, null, null, null, null, null); 
     ii=cursor.getColumnIndex("word"); 
     wordcombimelist=new ArrayList<String>(); 
     meancombimelist= new ArrayList<String>(); 
     while (cursor.moveToNext()){ 
      namelist.put(cursor.getString(ii), cursor.getString(cursor.getColumnIndex("definition"))); 
     } 
     Iterator entries = namelist.entrySet().iterator(); 
     while (entries.hasNext()) { 
      Map.Entry thisEntry = (Map.Entry) entries.next(); 
      wordcombimelist.add(String.valueOf(thisEntry.getKey())); 
      meancombimelist.add("- "+String.valueOf(thisEntry.getValue())); 
     } 

     for (int i = 0; i < wordcombimelist.size(); i++) { 
      data.add(new DictObjectModel(wordcombimelist.get(i), meancombimelist.get(i))); 
      } 
     adapter = new CustomAdapter(data); 
     recyclerView.setAdapter(adapter); 
    } 
} 

Я использую эти коды, чтобы добавить SearchView к панели действий, но getfilter() не работает.

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.menu_search, menu); 
     MenuItem item = menu.findItem(R.id.menuSearch); 
     SearchView searchView = (SearchView)item.getActionView(); 

     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 
       return false; 
      } 

      @Override 
      public boolean onQueryTextChange(String newText) { 
       adapter.getFilter().filter(newText); 

       return false; 
      } 
     }); 

     return super.onCreateOptionsMenu(menu); 
    } 

Пожалуйста, скажите мне, как я приближаюсь к своей цели Пожалуйста, помогите мне

+1

http://javapapers.com/android/android-searchview-action-bar-tutorial/ Посмотрите на этот блог! Он хорошо объясняет, как создать панель поиска. Или задайте конкретный вопрос к проблеме, которая у вас есть. Если вам нужен кто-то, чтобы разработать его для вас, посмотрите на upster.com. – GAlexMES

ответ

2

Создать вид поиска в меню опций затем использовать его переопределение onCreateOptionsMenu() программным способом.

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context=".MainActivity"> 
    <item 
     android:id="@+id/action_search" 
     android:icon="@android:drawable/ic_menu_search" 
     app:showAsAction="always" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     android:title="Search"/> 
</menu> 

Позже в классе активность,

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_main, menu); 

     MenuItem myActionMenuItem = menu.findItem(R.id.action_search); 
     final SearchView searchView = (SearchView) myActionMenuItem.getActionView(); 
     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 
       return false; 
      } 

      @Override 
      public boolean onQueryTextChange(String newText) { 
       if (TextUtils.isEmpty(newText)) { 
        adapter.filter(""); 
        listView.clearTextFilter(); 
       } else { 
        adapter.filter(newText); 
       } 
       return true; 
      } 
     }); 

     return true; 
    } 
Смежные вопросы