0

Je veux implémenter le filtre de recherche dans l'onglet Tabulation Fragment avec les données de la base de données sqlite, après plus de trois jours d'être this et this sans succès finalement je suis tombé sur this qui semble être idée propre depuis que je suis nouveau au développement android. j'ai essayé de l'implémenter mais ne semble pas fonctionner cela signifie que le menu de recherche ne gonfle pas aussi je n'obtiens aucun résultat, je ne sais pas où je me trompe et il n'y a aucune erreur, aucune idée de ce qui ne va pas et comment le faire fonctionner.android onglet vue fragment Recycleur view search filter

ici est le code Fragment

public class TabFragment3 extends Fragment implements SearchView.OnQueryTextListener { 
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); 
    recyclerView.setHasFixedSize(true); 
    layoutManager = new LinearLayoutManager(getContext()); 
    recyclerView.setLayoutManager(layoutManager); 
    controller = new DBController(getContext()); 
    arrayList = controller.getAllUsers(); 
    adapter = new UsersAdapter(arrayList,getContext()); 
    recyclerView.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 
    return view; 
     } 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.menu_main, menu); 

    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) { 
    return false; 
} 
@Override 
public boolean onQueryTextSubmit(String newText) { 
// Here is where we are going to implement the filter logic 
    newText = newText.toLowerCase(); 
    ArrayList<HashMap<String, String>> userlist = controller.getAllUsers(); 
    ArrayList<HashMap<String, String>> newList= new ArrayList<>(); 
    for(HashMap<String, String> entry : userlist){ 
     String name2= entry.get("number").toLowerCase(); 
     if(name2.contains(newText)){ 
      newList.add(entry); 
     }} 
    adapter.setFilter(newList); 
    return true; 
} 

}

/// adapter class 

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(); 
} 

}

/// principale

public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener,SearchView.OnQueryTextListener { 
private ViewPager viewPager; 
PagerAdapter adapter; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
    tabLayout.addTab(tabLayout.newTab().setText("Tab 1")); 
    tabLayout.addTab(tabLayout.newTab().setText("Tab 2")); 
    tabLayout.addTab(tabLayout.newTab().setText("Tab 3")); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

    final ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
    adapter = new PagerAdapter 
      (getSupportFragmentManager(), tabLayout.getTabCount()); 
    viewPager.setAdapter(adapter); 
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }); 
} 

@Override 
public void onTabSelected(TabLayout.Tab tab) { 
    viewPager.setCurrentItem(tab.getPosition()); 
} 

@Override 
public void onTabUnselected(TabLayout.Tab tab) { 

} 
@Override 
public void onTabReselected(TabLayout.Tab tab) { 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    return super.onOptionsItemSelected(item); 
} 

public boolean onQueryTextSubmit(String query) 
{ return false; 
} 
@Override 
public boolean onQueryTextChange(String newText) { 

    return false; 
     } 

}

+0

à quel problème faites-vous face? l'élément du menu de recherche ne se gonfle pas? ou vous n'obtenez pas le résultat? Ou qu'est-ce que c'est? – iMDroid

+0

il ne gonfle pas donc même le résultat n'est pas trouvé @ Sherl0cked –

Répondre

2
  1. Ajoutez setHasOptionsMenu(true) dans la méthode onCreateView() de votre TabFragment3. Il indique à l'activité de l'hôte que votre fragment contient des options de menu qu'il souhaite ajouter.

  2. ajouter également super.onCreateOptionsMenu(menu,inflater) ..

    @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_main, menu); super.onCreateOptionsMenu(menu,inflater); }

  3. intérieur onOptionsItemSelected(MenuItem item)retour faux, comme l'action de l'élément de menu serait hanlded dans TabFragment3 de onOptionsItemSelected(MenuItem item) du MainActivity.

+0

j'ai essayé le concept, mais ne fonctionne toujours pas @ Sherl0cked –

+0

résolu rien? ne peut toujours pas voir l'icône de recherche dans la barre d'outils? – iMDroid

+0

recherche je con est là mais il ne gonfle pas @ Sherl0cked –