制作菜单和搜索功能的实现

制作单词记录App(二)
本文为学习类文档,通过学习B站up主的视频,再加上自己的总结与理解的学习类文章,如有侵权,请联系博主进行删除制作单词记录App(二)
紧接着上次的继续做
完善查询功能和切换布局功能,制作清空功能
制作菜单 制作菜单和搜索功能的实现
res->new-> file
type选择menu即可
制作menu界面
拖动两个Menu Item和一个 Item至布局中,改写id和title
默认的搜索栏在menu下拉列表中,需要设置属性使其在导航栏中显示,如下图所示


在中复写函数()来添加刚创建的menu
@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main_menu,menu);return super.onCreateOptionsMenu(menu);}
制作菜单和搜索功能的实现

文章插图
即可在所有界面添加该菜单,但不是我们想要的效果,因为在第二个添加界面我们不需要搜索框等工具,因此本次项目需要在对应的中复写上述函数:
在中复写函数:由于中默认不显示菜单,所以我们需要在构造方法中设置显示拥有菜单为真
public WordsFragment() {// Required empty public constructorsetHasOptionsMenu(true);}@Overridepublic void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {super.onCreateOptionsMenu(menu, inflater);inflater.inflate(R.menu.main_menu,menu);}
制作工具条的内容功能
设置搜索栏点击时,系统名不被隐藏的方法:
@Overridepublic void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {super.onCreateOptionsMenu(menu, inflater);inflater.inflate(R.menu.main_menu,menu);SearchView searchView = (SearchView) menu.findItem(R.id.app_bar_search).getActionView();//获取搜索栏的引用searchView.setMaxWidth(1000); //设置搜索栏宽度以防系统名被隐藏}
返回数据库底层制作查询功能:
(1)在中添加模糊查询功能代码:
@Query("SELECT * FROM WORD WHERE english_word LIKE :pattern ORDER BY ID DESC")LiveData> findWordsWithPattern(String pattern);
(2)在中添加代码:
LiveData> findWordsWithPattern(String pattern) {return wordDao.findWordsWithPattern("%" + pattern + "%");//通配符保证模糊匹配}
(3)在中添加代码:
LiveData> findWordsWithPattern(String pattern) {return wordRepository.findWordsWithPattern(pattern);}
在中添加过滤后的词汇变量:
制作菜单和搜索功能的实现

文章插图
制作中的搜索栏的监听器:
import android.os.Bundle;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import androidx.fragment.app.Fragment;import androidx.lifecycle.LiveData;import androidx.lifecycle.Observer;import androidx.lifecycle.ViewModel;import androidx.lifecycle.ViewModelProvider;import androidx.lifecycle.ViewModelProviders;import androidx.navigation.NavController;import androidx.navigation.Navigation;import androidx.recyclerview.widget.LinearLayoutManager;import androidx.recyclerview.widget.RecyclerView;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuInflater;import android.view.View;import android.view.ViewGroup;import android.view.ViewParent;import android.widget.Adapter;import android.widget.SearchView;import com.google.android.material.floatingactionbutton.FloatingActionButton;import java.util.List;/*** A simple {@link Fragment} subclass.*/public class WordsFragment extends Fragment {private WordViewModel wordViewModel;private RecyclerView recyclerView;private MyAdapter myAdapter1,myAdapter2;private FloatingActionButton floatingActionButton;private LiveData