Android 在搜索栏中搜索单独的片段
我在一个活动(Home.java)中制作了不同的片段,其中有工具栏和导航抽屉。Android 在搜索栏中搜索单独的片段,android,android-fragments,search,searchbar,Android,Android Fragments,Search,Searchbar,我在一个活动(Home.java)中制作了不同的片段,其中有工具栏和导航抽屉。 现在我想把searchview放在片段中。我们通常在oncreateoption菜单中编写与searchview相关的所有代码。我也做了同样的事情,但oncreateoption是在片段内部创建的 我没有收到任何错误,但工具栏上没有显示搜索栏 package com.example.foody; import android.database.Cursor; import android.os.Bundle; i
现在我想把searchview放在片段中。我们通常在oncreateoption菜单中编写与searchview相关的所有代码。我也做了同样的事情,但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;
}
}
package com.example.foody;
导入android.database.Cursor;
导入android.os.Bundle;
导入android.support.v4.app.Fragment;
导入android.support.v7.widget.LinearLayoutManager;
导入android.support.v7.widget.RecyclerView;
导入android.support.v7.widget.SearchView;
导入android.view.LayoutInflater;
导入android.view.Menu;
导入android.view.MenuInflater;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.ViewGroup;
导入java.util.ArrayList;
公共类fitem extends片段实现SearchView.OnQueryTextListener
{
回收视图rv1;
fitemAdapter适配器;
ArrayList项;
光标cr;
储存罐;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态)
{
视图v=充气机。充气(R.layout.fragment_fitem,容器,假);
sob=新存储(getContext());
Bundle=this.getArguments();
if(bundle==null)
cr=sob.allData();//如果从主页调用
其他的
cr=sob.categorisedData(bundle.getString(“category”);//如果从category页面调用
inData();
rv1=v.findViewById(R.id.rv1);
rv1.setHasFixedSize(真);
rv1.setLayoutManager(新的LinearLayoutManager(getContext());
适配器=新的fitemAdapter(getContext(),item);
rv1.设置适配器(适配器);
返回v;
}
void inData()
{
item=newarraylist();
while(cr.moveToNext())
{
添加(新的All_数据(cr.getString(0)、cr.getString(2)、cr.getString(3));
}
}
创建选项菜单(菜单菜单,菜单充气机)
{
super.onCreateOptions菜单(菜单,充气机);
充气机。充气(右菜单。工具菜单,菜单);
MenuItem searchItem=menu.findItem(R.id.search1);
SearchView SearchView=(SearchView)searchItem.getActionView();
setOnQueryTextListener(fitem.this);
searchView.setQueryHint(“搜索”);
}
@凌驾
公共布尔值onQueryTextChange(字符串s)
{
字符串userInput=s.toLowerCase();
ArrayList filterlist=新建ArrayList();
对于(inti=0;i在片段的onCreate()/onCreateView()
callsethastoptionmenu(true);
这将允许您的片段在片段的onCreateOptions菜单()
中显示您膨胀的菜单项;否则它将使用宿主活动的菜单。在片段的onCreate()/onCreateView()
调用sethasOptions菜单(true);
这将允许您的片段在片段的onCreateOptions菜单()
中显示您膨胀的菜单项;否则它将使用宿主活动的菜单