Ich erstelle eine Android-Anwendung. In der Anwendung habe ich eine Login-Seite. Nach dem Login wird eine Benutzerliste angezeigt. Die Benutzerlistenaktivität ist HomeActivity.java
, die zwei Fragmente enthält, die als UserListFragment.java
und ChatFragment.java
bezeichnet werden. Die Benutzerliste wird von firebase angezeigt.Searchview in actionbar in Fragment
Die UserListFragment.java enthält eine Aktionsleiste mit einem Suchmenü und einem Abmelde-Menü. Das Abmelde-Menü funktioniert gut, aber die Suche funktioniert nicht. Das Suchsymbol wird angezeigt, aber wenn ich etwas suche, zeigt es nichts, d. H. Keine Filter. Ich verwende Firebase, um die Benutzerliste anzuzeigen.
Ich will nicht die Suche in ChatFragment.java angezeigt werden
ich verschiedene verschiedene verschiedene Lösungen ausprobiert. Aber keiner hat für mich funktioniert.
Hier ist der Code.
UserListFragment.java
public class UsersListFragment extends Fragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
Activity activity;
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
private static final String TAG = "UsersListFragment";
private OnFragmentInteractionListener mListener;
private ListView listView;
private List<UserData> users;
private CustomAdapter adapter;
SharedPreferences.Editor preferenceEditor;
Timer myTimer;
View view;
ActionBar actionBar;
private static final String PREFRENCES_NAME = "setPreferences";
private ProgressDialog progressBar;
String partnerKeyValue;
// TODO: Rename and change types and number of parameters
public static UsersListFragment newInstance(String param1, String param2) {
UsersListFragment fragment = new UsersListFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Global.getInstance().unreadMessageUsers.clear();
progressBar = new ProgressDialog(getActivity());
progressBar.setCancelable(false);
progressBar.setMessage("Loading...");
progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressBar.setProgress(0);
}
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {
inflater.inflate(R.menu.menu_userlist,menu);
MenuItem item = menu.findItem(R.id.menuSearch);
SearchView searchView = (SearchView)item.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
Log.i(TAG,newText);
adapter.getFilter().filter(newText);
return true;
}
});
super.onCreateOptionsMenu(menu,inflater);
}
private void logoutUser(){
Intent I = new Intent(getActivity(), LoginActivity.class);
startActivity(I);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menuSearch :
return true;
case R.id.menuLogout :
logoutUser();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
menu_userlist.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menuSearch"
android:title="@string/search"
android:icon="@drawable/ic_search"
app:actionViewClass="android.widget.SearchView"
app:showAsAction="always">
</item>
<item android:id="@+id/menuLogout"
android:title="@string/logout"
android:icon="@drawable/ic_logout"
app:showAsAction="always">
</item>
CustomAdapter.java
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,FilterResults results) {
users = (List<UserData>) results.values; // has the filtered values
notifyDataSetChanged(); // notifies the data with new filtered values
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new Filter.FilterResults();
List<String> FilteredArrList = new ArrayList<String>();
if (mOriginalValues != null) {
if (constraint == null || constraint.length() == 0) {
// set the Original result to return
results.count = mOriginalValues.size();
results.values = mOriginalValues;
} else {
constraint = constraint.toString().toLowerCase();
for (int i = 0; i < mOriginalValues.size(); i++) {
String data = mOriginalValues.get(i).toString();
if (data.toLowerCase().contains(constraint.toString())) {
FilteredArrList.add(data);
}
}
// set the Filtered result to return
results.count = FilteredArrList.size();
results.values = FilteredArrList;
}
}
return results;
}
};
return filter;
}
}
Ist Ihre Filter-Methode zu arbeiten? Haben Sie den Wert der Rückgabevariable 'resultes' überprüft? – Dibzmania
@Dibzmania my ** Ergebnisse ** Variable enthält diesen Wert **[email protected]** Jedes Mal, wenn ich ein Alphabet eintippe, wird ein Wert erreicht erzeugt für jedes Alphabet Ich gebe Suche wie oben ein. Ich weiß nicht, was es ist. – Rider
@Dibzmania Ich denke, ich bekomme null Wert. Als ich versuchte, ** results.values ** zu drucken, bekam ich einen Ausnahmefehler von null. Wie kann ich es lösen? – Rider