android选项卡查看碎片回收器查看搜索筛选项目单击获取错误位置
您好,我找到了“”代码,用于过滤reyclerview选项卡片段我尝试使用这个想法,效果很好, 但问题是,当我获得筛选结果并单击此类项时,让我们说onclick我想将值发送到另一个活动或toast单击的项值 它带来了错误的结果。我遵循了一些解决方案,如和,但我仍然失去了一些要点,因为代表问题的代码snipe有点不同,因此我无法根据我的案例连接点,但我意识到我对文本的过滤发生了变化,但我重用了旧的过滤器,而不是创建新的过滤器, 一些解决方案引入了绑定视图持有者解决方案和其他基于问题的解决方案,我个人不知道哪种方法是解决此问题的最佳方法,因此从下面的代码中,我应该从何处开始控制问题以及如何解决问题:android选项卡查看碎片回收器查看搜索筛选项目单击获取错误位置,android,android-fragments,searchview,android-filterable,android-filter,Android,Android Fragments,Searchview,Android Filterable,Android Filter,您好,我找到了“”代码,用于过滤reyclerview选项卡片段我尝试使用这个想法,效果很好, 但问题是,当我获得筛选结果并单击此类项时,让我们说onclick我想将值发送到另一个活动或toast单击的项值 它带来了错误的结果。我遵循了一些解决方案,如和,但我仍然失去了一些要点,因为代表问题的代码snipe有点不同,因此我无法根据我的案例连接点,但我意识到我对文本的过滤发生了变化,但我重用了旧的过滤器,而不是创建新的过滤器, 一些解决方案引入了绑定视图持有者解决方案和其他基于问题的解决方案,我个
public class TabFragment3 extends Fragment implements SearchView.OnQueryTextListener {
private IFragmentToActivity mCallback;
private RecyclerView recyclerView;
private LinearLayoutManager layoutManager;
private UsersAdapter adapter;
ArrayList<HashMap<String, String>> arrayList;
DBController controller = new DBController(getContext());
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view =inflater.inflate(R.layout.tab_fragment_3, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.usersList);
setHasOptionsMenu(true);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setHasOptionsMenu(true);
controller = new DBController(getContext());
arrayList = controller.getAllUsers();
adapter = new UsersAdapter(arrayList,getContext());
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_main, menu);
super.onCreateOptionsMenu(menu,inflater);
final MenuItem item = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
searchView.setOnQueryTextListener(this);
MenuItemCompat.setOnActionExpandListener(item,new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
arrayList = controller.getAllUsers();
// Do something when collapsed
adapter.setFilter(arrayList);
return true; // Return true to collapse action view
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// Do something when expanded
return true; // Return true to expand action view
}
});
}
@Override
public boolean onQueryTextChange(String query) {
query = query.toLowerCase();
arrayList = controller.getAllUsers();
ArrayList<HashMap<String, String>> newList= new ArrayList<>();
for(HashMap<String, String> entry : arrayList){
String name2= entry.get("number").toLowerCase();
if(name2.contains(query)){
newList.add(entry);
}
}
adapter.setFilter(newList);
return true;
}
@Override
public boolean onQueryTextSubmit(String newText) {
return false;
}
}
公共类选项卡Fragment3扩展了片段实现了SearchView.OnQueryTextListener{
私人IfRampentToActivity McCallback;
私人回收站;
私人专线经理;布局经理;
私有用户适配器;
ArrayList ArrayList;
DBController=newdbcontroller(getContext());
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.tab\u fragment\u 3,容器,错误);
recyclerView=(recyclerView)view.findViewById(R.id.usersList);
设置选项菜单(真);
recyclerView.setHasFixedSize(true);
layoutManager=新的LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
返回视图;
}
@凌驾
已创建视图上的公共void(视图,捆绑保存状态){
super.onViewCreated(视图,savedInstanceState);
设置选项菜单(真);
controller=newdbcontroller(getContext());
arrayList=controller.getAllUsers();
adapter=newusersadapter(arrayList,getContext());
recyclerView.setAdapter(适配器);
adapter.notifyDataSetChanged();
}
@凌驾
创建选项菜单(菜单菜单,菜单充气机){
充气机。充气(右菜单。主菜单,菜单);
super.onCreateOptions菜单(菜单,充气机);
final MenuItem=menu.findItem(R.id.action\u search);
最终搜索视图SearchView=(SearchView)MenuItemCompat.getActionView(项);
setOnQueryTextListener(这个);
MenuItemCompat.setOnActionExpandListener(项,新MenuItemCompat.OnActionExpandListener(){
@凌驾
公共布尔值onMenuItemActionCollapse(MenuItem项){
arrayList=controller.getAllUsers();
//崩溃时做点什么
adapter.setFilter(arrayList);
return true;//将true返回到折叠操作视图
}
@凌驾
公共布尔值onMenuItemActionExpand(MenuItem项){
//扩展时做某事
return true;//返回true以展开操作视图
}
});
}
@凌驾
公共布尔onQueryTextChange(字符串查询){
query=query.toLowerCase();
arrayList=controller.getAllUsers();
ArrayList newList=新的ArrayList();
for(HashMap条目:arrayList){
String name2=entry.get(“number”).toLowerCase();
if(name2.contains(查询)){
newList.add(条目);
}
}
adapter.setFilter(newList);
返回true;
}
@凌驾
公共布尔值onQueryTextSubmit(字符串newText){
返回false;
}
}
/////适配器
public class UsersAdapter extends
RecyclerView.Adapter<UsersAdapter.UserViewHolder> {
ArrayList<HashMap<String, String>> mDataSet= new ArrayList<HashMap<String,
String>> ();
Context ctx;
public UsersAdapter(ArrayList<HashMap<String, String>> mDataSet,Context ctx)
{
this.mDataSet = mDataSet;
this.ctx=ctx;
}
@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_row, parent, false);
UserViewHolder userViewHolder = new UserViewHolder(v,mDataSet,ctx);
return userViewHolder;
}
@Override
public void onBindViewHolder(UserViewHolder holder, int position) {
holder.name_entry.setText(mDataSet.get(position).get("userId"));
holder.email_entry.setText(mDataSet.get(position).get("userName"));
holder.icon_entry.setText(""+mDataSet.get(position).get("number"));
}
@Override
public int getItemCount() {
return mDataSet.size();
}
public static class UserViewHolder extends RecyclerView.ViewHolder {
CardView cardView;
TextView name_entry, email_entry, icon_entry;
Context ctx;
ArrayList<HashMap<String, String>> mDataSet= new ArrayList<HashMap<String, String>> ();
public UserViewHolder(View itemView, ArrayList<HashMap<String,
String>> mDataSet,Context ctx) {
super(itemView);
this.mDataSet=mDataSet;
this.ctx= ctx;
cardView = (CardView) itemView.findViewById(R.id.user_layout);
name_entry = (TextView) itemView.findViewById(R.id.name_entry);
email_entry = (TextView) itemView.findViewById(R.id.email_entry);
icon_entry = (TextView) itemView.findViewById(R.id.icon_entry);
}
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
public void setFilter(ArrayList<HashMap<String, String>> newList){
mDataSet= new ArrayList<HashMap<String, String>>();
mDataSet.addAll(newList);
notifyDataSetChanged();
}
公共类UsersAdapter扩展
RecyclerView.适配器{
ArrayList mDataSet=新的ArrayList();
上下文ctx;
public UsersAdapter(ArrayList mDataSet,Context ctx)
{
this.mDataSet=mDataSet;
这个.ctx=ctx;
}
@凌驾
公共用户ViewHolder onCreateViewHolder(视图组父级,int-viewType)
{
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.user_行,parent,false);
UserViewHolder UserViewHolder=新的UserViewHolder(v,mDataSet,ctx);
返回userViewHolder;
}
@凌驾
public void onBindViewHolder(UserViewHolder,int位置){
holder.name_entry.setText(mDataSet.get(position.get(“userId”));
holder.email_entry.setText(mDataSet.get(position.get)(“用户名”);
holder.icon_entry.setText(“+mDataSet.get(position.get(“number”)));
}
@凌驾
public int getItemCount(){
返回mDataSet.size();
}
公共静态类UserViewHolder扩展了RecyclerView.ViewHolder{
卡德维尤;
文本视图名称输入、电子邮件输入、图标输入;
上下文ctx;
ArrayList mDataSet=新的ArrayList();
公共用户视图持有者(视图项视图、ArrayList mDataSet、上下文ctx){
超级(项目视图);
this.mDataSet=mDataSet;
这个.ctx=ctx;
cardView=(cardView)itemView.findViewById(R.id.user\u布局);
name\u entry=(TextView)itemView.findViewById(R.id.name\u entry);
email\u entry=(TextView)itemView.findViewById(R.id.email\u entry);
icon_entry=(TextView)itemView.findViewById(R.id.icon_entry);
}
}
@凌驾
附加ToRecyclerView(RecyclerView RecyclerView)上的公共无效{
super.onAttachedToRecyclerView(recyclerView);
}
public void setFilter(ArrayList newList){
mDataSet=newarraylist();
mDataSet.addAll(newList);
notifyDataSetChanged();
}