SearchViewを実装したいのですがうまくいきません。
コメントアウトしてある状態だと画像のようにmenubuttonの中の要素として表示されてしまいます。
![イメージ説明]WIDTH:475
コメントアウトを外すとnullpointerが出てしまいます。
本当は以下のような感じにしたいです
![イメージ説明]WIDTH:370
理由がわかれば是非教えていただきたいです。
MainActivity
package com.movie.kento.movie; import android.app.ActionBar; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.GridView; import android.widget.SearchView; import android.widget.Toast; import com.android.volley.DefaultRetryPolicy; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.RetryPolicy; import com.android.volley.VolleyError; import com.android.volley.toolbox.JsonArrayRequest; import com.android.volley.toolbox.Volley; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; public class MainActivity extends Activity { private SearchView searchView; private String searchWord; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.search, menu); //SearchViewの取得 MenuItem menuItem = menu.findItem(R.id.search_menu_search_view); searchView = (SearchView) menuItem.getActionView(); ここでnullpointerが出てしまいます // //ICON表示 // searchView.setIconifiedByDefault(true); // // //SUBMITボタンを表示しない // this.searchView.setSubmitButtonEnabled(false); // // if (!this.searchWord.equals("")){ // //set_text的なもの // this.searchView.setQuery(this.searchWord, false); // } else { // String queryHint = "検索BOX"; // //placeholder的なもの // this.searchView.setQueryHint(queryHint); // } // this.searchView.setOnQueryTextListener(onQueryTextListener); return true; } private SearchView.OnQueryTextListener onQueryTextListener = new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String searchWord) { // SubmitボタンorEnterKeyを押されたら呼び出されるメソッド return setSearchWord(searchWord); } @Override public boolean onQueryTextChange(String newText) { // 入力される度に呼び出される return false; } }; private boolean setSearchWord(String searchWord) { ActionBar actionBar = getActionBar(); 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; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); return super.onOptionsItemSelected(item); } }
search.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/search_menu_search_view" android:orderInCategory="100" android:title="検索" app:actionViewClass="android.support.v7.widget.SearchView" app:showAsAction="always" /> </menu>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/01/01 17:06