Android RecycleView以编程方式添加搜索视图
我以编程方式设计RecycleView而不使用XML,因此我可以通过处理Java文件在所有项目中重用此代码 我需要将SearchView添加到RecycleView,并以编程方式设置所有搜索查询过滤器,而无需使用任何第三方APIAndroid RecycleView以编程方式添加搜索视图,android,search,filter,android-recyclerview,Android,Search,Filter,Android Recyclerview,我以编程方式设计RecycleView而不使用XML,因此我可以通过处理Java文件在所有项目中重用此代码 我需要将SearchView添加到RecycleView,并以编程方式设置所有搜索查询过滤器,而无需使用任何第三方API SearchView searchVyuVar = new SearchView(this); searchVyuVar.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Overrid
SearchView searchVyuVar = new SearchView(this);
searchVyuVar.setOnQueryTextListener(new SearchView.OnQueryTextListener()
{
@Override
public boolean onQueryTextSubmit(String query)
{
recylcleLysLysMgrVar.filter(query);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
recylcleLysLysMgrVar.filter(newText);
return true;
}
});
RecyclerView recylcleLysLyoVav = new RecyclerView(this);
recylcleLysLyoVav.addView(searchVyuVar);
recylcleLysLyoVav.setAdapter(recylcleLysLysMgrVar);
recylcleLysLyoVav.setLayoutManager(new LinearLayoutManager(this));
经过一整天的努力,我得到了这个按程序设计的搜索栏。
通过以下链接的帮助
这是为了帮助所有我不想像我一样挣扎的人
LinearLayout NamSupRloVav;
SearchView NamSrhVyuVav;
RecyclerView NamLysLyoVav;
NamLysAdrCls NamLysAdrVar;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
NamSupRloVav = new LinearLayout(this);
NamSupRloVav.setOrientation(LinearLayout.VERTICAL);
NamSrhVyuVav = new SearchView(this);
NamSrhVyuVav.setQueryHint("Search . . .");
NamSrhVyuVav.setIconified(false);
NamSrhVyuVav.onActionViewExpanded();
NamSrhVyuVav.setPadding(20,10,20,10);
NamSupRloVav.addView(NamSrhVyuVav);
NamLysLyoVav = new RecyclerView(this);
NamLysLyoVav.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
NamLysLyoVav.setVerticalScrollBarEnabled(true);
NamLysAdrVar = new NamLysAdrCls(GetAllNamAryLysFnc());
NamLysLyoVav.setAdapter(NamLysAdrVar);
NamLysLyoVav.setLayoutManager(new LinearLayoutManager(this));
NamSrhVyuVav.setOnQueryTextListener(new SearchView.OnQueryTextListener()
{
@Override
public boolean onQueryTextChange(String SrhSrgPsgVal)
{
NamLysAdrVar.SrhFltFnc(SrhSrgPsgVal);
return true;
}
@Override
public boolean onQueryTextSubmit(String SrhSrgPsgVal)
{
NamLysAdrVar.SrhFltFnc(SrhSrgPsgVal);
return true;
}
});
NamSupRloVav.addView(NamLysLyoVav);
setContentView(NamSupRloVav);
}
public class NamLysAdrCls extends RecyclerView.Adapter<VyuHlrCls>
{
ArrayList<NamCls> FchNamAryLysVar = new ArrayList<NamCls>();
ArrayList<NamCls> SrhNamAryLysVar = new ArrayList<NamCls>();
public NamLysAdrCls(ArrayList<NamCls> NamLysPsgVar)
{
FchNamAryLysVar.addAll(NamLysPsgVar);
SrhNamAryLysVar.addAll(NamLysPsgVar);
}
@Override
public VyuHlrCls onCreateViewHolder(ViewGroup HubVyuGrp, int viewType)
{
// |=> CodTdo Design Itm Idx Lyo
VyuHlrCls VyuHlrVar = new VyuHlrCls(NamLysItmLloVav);
return VyuHlrVar;
}
@Override
public void onBindViewHolder(VyuHlrCls VyuHlrPsgVar, int ItmIdxPsgVar)
{
}
@Override
public int getItemCount()
{
return SrhNamAryLysVar.size();
}
public void DelItmFnc(int ItmPosPsgVar)
{
SrhNamAryLysVar.remove(ItmPosPsgVar);
notifyItemRemoved(ItmPosPsgVar);
}
public void SrhFltFnc(String SrhSrgPsgVal)
{
SrhSrgPsgVal = SrhSrgPsgVal.toLowerCase();
SrhNamAryLysVar.clear();
if (SrhSrgPsgVal.length() == 0) SrhNamAryLysVar.addAll(FchNamAryLysVar);
else
{
for (NamCls NamIdxVar : FchNamAryLysVar)
{
if(NamIdxVar.toLowerCase().contains(SrhSrgPsgVal))
{
SrhNamAryLysVar.add(NamIdxVar);
}
}
}
notifyDataSetChanged();
}
}
LinearLayout NamSupRloVav;
SearchView NamSrhVyuVav;
回收视图Namlyslyovava;
NamLysAdrCls NamLysAdrVar;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
NamSupRloVav=新的线性布局(本);
NamSupRloVav.设置方向(线性布局。垂直);
NamSrhVyuVav=新的搜索视图(此);
NamSrhVyuVav.setQueryHint(“搜索…”);
NamSrhVyuVav.setIconified(假);
NamSrhVyuVav.onActionViewExpanded();
NamSrhVyuVav.设置填充(20,10,20,10);
NamSupRloVav.addView(NamSrhVyuVav);
Namlyslyovava=新的回收视图(本);
Namlyslyovava.addItemDecoration(新的DividerItemDecoration(此,DividerItemDecoration.垂直));
Namlyslyovava.setVerticalScrollBarEnabled(真);
NamLysAdrVar=新的NamLysAdrCls(GetAllNamAryLysFnc());
Namlyslyovava.setAdapter(NamLysAdrVar);
Namlyslyovava.setLayoutManager(新直线布局经理(本));
NamSrhVyuVav.setOnQueryTextListener(新的SearchView.OnQueryTextListener()
{
@凌驾
公共布尔onQueryTextChange(字符串SrhSrgPsgVal)
{
NamLysAdrVar.SrhFltFnc(SrhSrgPsgVal);
返回true;
}
@凌驾
公共布尔值onQueryTextSubmit(字符串SrhSrgPsgVal)
{
NamLysAdrVar.SrhFltFnc(SrhSrgPsgVal);
返回true;
}
});
NamSupRloVav.addView(Namlyslyovava);
setContentView(NamSupRloVav);
}
公共类NamLysAdrCls扩展了RecyclerView.Adapter
{
ArrayList fchnamarysvar=新的ArrayList();
ArrayList srhnamarysvar=新的ArrayList();
公共NamLysAdrCls(ArrayList NamLysPsgVar)
{
FchNamAryLysVar.addAll(NamLysPsgVar);
Srhnamarysvar.addAll(NamLysPsgVar);
}
@凌驾
公共VyuHlrCls onCreateViewHolder(视图组HubVyuGrp,int-viewType)
{
//|=>CodTdo设计Itm Idx Lyo
VyuHlrCls VyuHlrVar=新的VyuHlrCls(Namlistmlovava);
返回VyuHlrVar;
}
@凌驾
BindViewHolder上的公共无效(VyuHlrCls VyuHlrPsgVar,int ItmIdxPsgVar)
{
}
@凌驾
public int getItemCount()
{
返回srhnaysvar.size();
}
公共无效交付物FNC(int ItmPosPsgVar)
{
srhnamarysvar.remove(itmpospgvar);
notifyItemRemoved(ItmPosPsgVar);
}
公共无效SrhFltFnc(字符串SrhSrgPsgVal)
{
SrhSrgPsgVal=SrhSrgPsgVal.toLowerCase();
srhnaysvar.clear();
如果(SrhSrgPsgVal.length()==0)srhnamarysvar.addAll(fchnamarysvar);
其他的
{
用于(NamCls NamIdxVar:FCHNAMARYYSVAR)
{
if(NamIdxVar.toLowerCase().contains(SrhSrgPsgVal))
{
srhnamarysvar.add(NamIdxVar);
}
}
}
notifyDataSetChanged();
}
}
请忽略所用函数和变量的不同命名形式。