前提・実現したいこと
検索バーを実装したいです。しかし、実行を試みると、RuntimeExceptionとなってしまいます。検索バーを表示し、検索できるようにしたいです。
どうすれば実行可能になるか教えていただきたいです。
発生している問題・エラーメッセージ
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.roomtodo, PID: 29545 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.roomtodo/com.example.roomtodo.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.SearchView.setOnQueryTextListener(android.widget.SearchView$OnQueryTextListener)' on a null object reference
該当のソースコード
java
1package com.example.roomtodo; 2 3import androidx.appcompat.app.AppCompatActivity; 4import androidx.recyclerview.widget.LinearLayoutManager; 5import androidx.recyclerview.widget.RecyclerView; 6 7import android.os.Bundle; 8import android.view.Menu; 9import android.view.View; 10import android.widget.Button; 11import android.widget.EditText; 12import android.widget.SearchView; 13 14import java.util.ArrayList; 15import java.util.List; 16 17public class MainActivity extends AppCompatActivity { 18 EditText editText; 19 Button btnAdd; 20 Button btnReset; 21 RecyclerView recyclerView; 22 SearchView searchView; 23 24 List<MainData> dataList = new ArrayList<>(); 25 LinearLayoutManager linearLayoutManager; 26 RoomDB database; 27 MainAdapter adapter; 28 29 @Override 30 protected void onCreate(Bundle savedInstanceState) { 31 super.onCreate(savedInstanceState); 32 setContentView(R.layout.activity_main); 33 34 editText = findViewById(R.id.edit_text); 35 btnAdd = findViewById(R.id.btn_add); 36 btnReset = findViewById(R.id.btn_reset); 37 recyclerView = findViewById(R.id.recycler_view); 38 searchView = findViewById(R.id.action_search); 39 40 database = RoomDB.getInstance(MainActivity.this); 41 dataList = database.mainDao().getAll(); 42 43 linearLayoutManager = new LinearLayoutManager(this); 44 recyclerView.setLayoutManager(linearLayoutManager); 45 46 adapter = new MainAdapter(MainActivity.this, dataList); 47 recyclerView.setAdapter(adapter); 48 49 btnAdd.setOnClickListener(new View.OnClickListener() { 50 略 51 }); 52 53 btnReset.setOnClickListener(new View.OnClickListener() { 54 略 55 }); 56 57 searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){ 58 @Override 59 public boolean onQueryTextChange(String newText){ 60 61 dataList.clear(); 62 dataList.addAll(database.mainDao().search(newText)); 63 adapter.notifyDataSetChanged(); 64 return true; 65 } 66 67 @Override 68 public boolean onQueryTextSubmit(String query){ 69 return true; 70 } 71 72 }); 73 } 74 75 @Override 76 public boolean onCreateOptionsMenu(Menu menu) { 77 getMenuInflater().inflate(R.menu.menu,menu); 78 return super.onCreateOptionsMenu(menu); 79 } 80}
xml
1<?xml version="1.0" encoding="utf-8"?> 2<menu xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto"> 4 5 <item 6 android:id="@+id/action_search" 7 android:icon="@drawable/ic_search" 8 android:title="Search" 9 app:actionViewClass="android.widget.SearchView" 10 app:showAsAction="always" /> 11 12</menu>
・searchView = findViewById(R.id.action_search);により、searchViewがnullになっていることは無いと考えているのですが、違うようです。
・btnAdd, btnResetはうまく機能しているしているため省略しています。
試したこと
以下の資料を参考にし、試してみましたが、うまくエラーを解決することができませんでした。
- [Why searchview is a null object reference?
](https://stackoverflow.com/questions/53711903/why-searchview-is-a-null-object-reference)
みなさんは実装したことがない機能を実装する場合、どのように調べ、実装を進めていくかも併せて教えていただければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/22 19:11