0

앱의 모든 활동에서 검색 특정 목록 뷰일 수있는 작업 표시 줄에 검색 기능을 추가하는 방법은 무엇입니까?searchView가있는 Android ActionBar

나는 적절한 예를 찾을 수 없다. 목록보기 데이터는 서버에서 제공되며 this link의 도움으로 구현되었습니다.

+0

이 링크는 도움이 될 수 있습니다 : http://javapapers.com/android/android-searchview-action-bar-tutorial/ –

답변

0

먼저 어댑터에 Filterable을 구현해야합니다. 그런 다음 검색 필드를 작업 표시 줄 메뉴에 추가하십시오. 이 후

<item android:id="@+id/menu_search" android:icon="@android:drawable/ic_menu_search" app:showAsAction="always" app:actionViewClass="android.support.v7.widget.SearchView" android:title="Search"/>

은 활동에서 다음을 수행합니다.

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     MenuItem searchMenuItem = menu.findItem(R.id.menu_search); 
     if (searchMenuItem == null) { 
      return; 
     } 

     searchView = (SearchView) searchMenuItem.getActionView(); 
     if (searchView != null) { 
      searchView.setQueryHint(getString(R.string.search_hint)); 
      searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
       @Override 
       public boolean onQueryTextSubmit(String s) { 
        return false; 
       } 

       @Override 
       public boolean onQueryTextChange(String s) { 
        SearchFragment.this.onQueryTextChange(s); 
        return false; 
       } 
      }); 
     } 
    } 

다음

void onQueryTextChange(String query) { searchAdapter.getFilter().filter(query); }

0

대략, 당신은 customListVolley 프로젝트에 다음과 같이 수정해야, 안드로이드에 도구 모음을 사용하여 기본 searchView 구현하려면 :

1.activity_main.xml에 툴바 추가
예를 들면 다음과 같습니다.

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" > 

    <android.support.v7.widget.Toolbar 
     android:visibility="visible" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/toolbar" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="#1111DD" 
     app:theme="@style/ToolbarTheme"/> 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:divider="@color/list_divider" 
     android:dividerHeight="1dp" 
     android:listSelector="@drawable/list_row_selector" /> 

</LinearLayout> 


2search_toolbar.xml 만들기 &는 다음과 같이 메뉴 폴더
에서 추가 :

<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" > 

    <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> 


3.당신의 CustomListAdapter.java 예를 들어 필터링
구현합니다 :

public class CustomListAdapter 
     extends BaseAdapter 
    implements Filterable 
{ 
    private Activity activity; 
    private LayoutInflater inflater; 
    private List<Movie> movieItems; 
    private List<Movie> originalList; //<-- 

    //--> 
    private ItemFilter mFilter = new ItemFilter(); 

    @Override 
    public Filter getFilter() { 
     return mFilter; 
    } 
    //<-- 

    ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 

    public CustomListAdapter(Activity activity, List<Movie> movieItems) { 
     this.activity = activity; 
     this.movieItems = movieItems; 
     originalList = movieItems; //<-- 
    } 

    . 
    . 
    . 

    //-->Implement your filter logic 
    private class ItemFilter extends Filter { 
     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 

      String filterString = constraint.toString().toLowerCase(); 

      FilterResults results = new FilterResults(); 

      List<Movie> movies = new ArrayList<>(); 

      for(Movie item : originalList) 
      { 
       if(item.getTitle().toLowerCase().contains(filterString)) 
        movies.add(item); 
      } 

      movieItems = movies; 
      results.count = movies.size(); 
      return null; 
     } 

     @SuppressWarnings("unchecked") 
     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 
      notifyDataSetChanged(); 
     } 
    }//<-- 
} 

4.당신의 searchView 주요 활동
이 같이 도구 모음 &를 초기화 :

public class MainActivity extends AppCompatActivity { 
    // Log tag 
    private static final String TAG = MainActivity.class.getSimpleName(); 

    // Movies json url 
    private static final String url = "http://api.androidhive.info/json/movies.json"; 
    private ProgressDialog pDialog; 
    private List<Movie> movieList = new ArrayList<Movie>(); 
    private ListView listView; 
    private CustomListAdapter adapter; 

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

     //-->Setup your toolbar 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     . 
     . 
     . 
    } 

    . 
    . 
    . 


    //--->Setup your searchView 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.search_toolbar, menu); 
     MenuItem searchItem = menu.findItem(R.id.action_search); 

     SearchView.OnQueryTextListener textChangeListener = new SearchView.OnQueryTextListener() 
     { 
      @Override 
      public boolean onQueryTextChange(String newText) 
      { 
       // this is your adapter that will be filtered 
       adapter.getFilter().filter(newText); 
       return true; 
      } 
      @Override 
      public boolean onQueryTextSubmit(String query) 
      { 
       // this is your adapter that will be filtered 
       adapter.getFilter().filter(query); 
       return true; 
      } 
     }; 
     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 

     SearchView searchView = null; 
     if (searchItem != null) { 
      searchView = (SearchView) searchItem.getActionView(); 
     } 
     if (searchView != null) { 
      searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
      searchView.setIconifiedByDefault(false); 
      searchView.setOnQueryTextListener(textChangeListener); 
     } 

     return super.onCreateOptionsMenu(menu); 
//  return true; 
    } 
} 

기본 searchView를 구현할 수 있어야합니다.

+0

좋아 .. 보자 .. –

+1

무엇이 문제인가? –

+0

아무것도 필터링하지 않음 .. –