android - 单独片段的搜索栏
问题描述
我在一个 Activity (Home.java) 中制作了不同的片段,其中有工具栏和导航抽屉。
现在我想把searchview放在fragment里面。我们通常把所有和searchview相关的代码都写在oncreateoption菜单里面。我做了同样的事情,但 oncreateoption 是在片段中创建的。
我没有收到任何错误,但工具栏上没有显示搜索栏。
package com.example.foody;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SearchView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
public class fitem extends Fragment implements SearchView.OnQueryTextListener
{
RecyclerView rv1;
fitemAdapter adapter;
ArrayList<All_Data> item;
Cursor cr;
Storage sob;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View v=inflater.inflate(R.layout.fragment_fitem, container, false);
sob=new Storage(getContext());
Bundle bundle = this.getArguments();
if (bundle == null)
cr=sob.allData(); //if called from home page
else
cr=sob.categorisedData(bundle.getString("category")); // if called from category page
inData();
rv1=v.findViewById(R.id.rv1);
rv1.setHasFixedSize(true);
rv1.setLayoutManager(new LinearLayoutManager(getContext()));
adapter=new fitemAdapter(getContext(),item);
rv1.setAdapter(adapter);
return v;
}
void inData()
{
item=new ArrayList<>();
while(cr.moveToNext())
{
item.add(new All_Data(cr.getString(0),cr.getString(2),cr.getString(3)));
}
}
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.tool_menu, menu);
MenuItem searchItem = menu.findItem(R.id.search1);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setOnQueryTextListener(fitem.this);
searchView.setQueryHint("Search");
}
@Override
public boolean onQueryTextChange(String s)
{
String userInput=s.toLowerCase();
ArrayList<All_Data> filterlist=new ArrayList<>();
for(int i=0;i<item.size();i++)
{
String st=item.get(i).getName().toLowerCase();
if(st.contains(userInput))
filterlist.add(item.get(i));
}
adapter=new fitemAdapter(getContext(),filterlist);
rv1.setAdapter(adapter);
return true;
}
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
}
解决方案
在您的片段onCreate()/onCreateView()
调用中setHasOptionsMenu(true);
这将允许您的片段显示您在片段的onCreateOptionsMenu()
;中膨胀的菜单项。否则它使用宿主 Activity 的菜单。
推荐阅读
- http - HTTPS 上的 Atmosphere Websockets
- android-fragments - android,片段的 getArguments() 是否总是返回为此片段设置的参数,即使在片段被销毁后也是如此?
- android - Room - 为什么使用 @Relation 而不是 @ForeignKey?
- node.js - 最后如何设置 mongo db,以便我可以在 Windows 上将它与 node Js 一起使用
- mysql - 在远程服务器上运行 Django,如何在浏览器中查看
- c# - 使用正则表达式匹配精确的单词
- java - Frozen TextArea Fx 写入时
- python-3.x - 在 python 包中查找某些方法和函数的所有用法
- c# - 保存数据后向用户显示消息
- javascript - 突出显示活动 DIV 中的元素