Last active
November 26, 2015 13:04
-
-
Save ryokosuge/58eb903bb0946befdbb4 to your computer and use it in GitHub Desktop.
【Android】SearchViewを使って検索画面を実装する rel : http://blog.ryochin.xyz/archives/80
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.os.Bundle; | |
import android.support.annotation.Nullable; | |
import android.support.v4.app.Fragment; | |
import android.support.v4.view.MenuItemCompat; | |
import android.support.v7.app.ActionBar; | |
import android.support.v7.app.ActionBarActivity; | |
import android.support.v7.widget.SearchView; | |
import android.view.LayoutInflater; | |
import android.view.MenuInflater; | |
import android.view.Menu; | |
import android.view.ViewGroup; | |
public class SearchFragment extends Fragment { | |
private static final String TAG = SearchFragment.class.getSimpleName(); | |
private final SearchFragment self = this; | |
private SearchView searchView; | |
private String searchWord; | |
@Override | |
public void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
// FragmentでMenuを表示する為に必要 | |
this.setHasOptionsMenu(true); | |
} | |
@Override | |
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { | |
return inflater.inflate(R.layout.fragment_search, container, false); | |
} | |
@Override | |
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { | |
super.onCreateOptionsMenu(menu, inflater); | |
// Menuの設定 | |
inflater.inflate(R.menu.search, menu); | |
// app:actionViewClass="android.support.v7.widget.SearchView"のItemの取得 | |
MenuItem menuItem = menu.findItem(R.id.search_menu_search_view); | |
/** | |
* API level 11以上の場合はこっちを使う | |
* | |
* this.searchView = (SearchView)menuItem.getActionView(); | |
*/ | |
// ActionViewの取得 | |
this.searchView = (SearchView) MenuItemCompat.getActionView(menuItem); | |
// 虫眼鏡アイコンを最初表示するかの設定 | |
this.searchView.setIconifiedByDefault(true); | |
// Submitボタンを表示するかどうか | |
this.searchView.setSubmitButtonEnabled(false); | |
if (!this.searchWord.equals("")) { | |
// TextView.setTextみたいなもの | |
this.searchView.setQuery(this.searchWord, false); | |
} else { | |
String queryHint = self.getResources().getString(R.string.search_menu_query_hint_text); | |
// placeholderみたいなもの | |
this.searchView.setQueryHint(queryHint); | |
} | |
this.searchView.setOnQueryTextListener(self.onQueryTextListener); | |
} | |
private SearchView.OnQueryTextListener onQueryTextListener = new SearchView.OnQueryTextListener() { | |
@Override | |
public boolean onQueryTextSubmit(String searchWord) { | |
// SubmitボタンorEnterKeyを押されたら呼び出されるメソッド | |
return self.setSearchWord(searchWord); | |
} | |
@Override | |
public boolean onQueryTextChange(String newText) { | |
// 入力される度に呼び出される | |
return false; | |
} | |
}; | |
private boolean setSearchWord(String searchWord) { | |
ActionBar actionBar = ((ActionBarActivity)this.getActivity()).getSupportActionBar(); | |
actionBar.setTitle(searchWord); | |
actionBar.setDisplayShowTitleEnabled(true); | |
if (searchWord != null && !searchWord.equals("")) { | |
// searchWordがあることを確認 | |
this.searchWord = searchWord; | |
} | |
// 虫眼鏡アイコンを隠す | |
this.searchView.setIconified(false); | |
// SearchViewを隠す | |
this.searchView.onActionViewCollapsed(); | |
// Focusを外す | |
this.searchView.clearFocus(); | |
return false; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
rel: http://qiita.com/ryokosuge/items/186c525e0744903ee8ce