質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

7148閲覧

SearchViewを実装したい(Android)

KentoSasamoto

総合スコア49

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2015/01/01 02:55

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>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

MainActivityのスーパークラスを、ActionBarActivity(android.support.v7.app.ActionBarActivity)にします。
もうひとつ、SearchViewは、android.support.v7.widget.SearchViewを参照するようにします。

そのとき、これらのクラスのimport文が下記のようになるようにしてください。同じクラス名のものは外します(消すかコメントアウトしてください)。

lang

1import android.support.v7.app.ActionBarActivity; 2import android.support.v7.widget.SearchView;

これでどうでしょうか。

また、解決できるかどうかは別として、このimportの問題は良くあることなので、参考にするページのimport文に注意してください。

投稿2015/01/01 16:48

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KentoSasamoto

2015/01/01 17:06

いつもありがとうございます!! おかげさまでできました!!!
guest

0

こちらで実行したところ、アクションバーが出てない状態で実行されたので、
menuItemがnullになっているのではないでしょうか。
MainActivity.javaの継承元をActionBarActivityに変えると
アクションバーがでるかもしれません。

投稿2015/01/01 13:33

MitiMinish

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問