У меня есть фрагмент, который состоит из панели поиска (не на панели инструментов), которая ищет "ARDNo.s" из таблицы USER в firebase.Данные извлекаются из Firebase (что успешно выполнено) и должны отображаться в виде списка, когда пользователь вводит в SearchView.Это работает во всех других действиях, кроме фрагмента. Я перепробовал много решений в stackoverflow, но ни одно из них не работает.
[EDIT] Я нашел решение.Я возвращал inflater.inflate (R.layout.fragment_search, container, false);вместо rootView.Заменено
return inflater.inflate(R.layout.fragment_search, container, false);
на
return rootView
Теперь это работает!
Я прикрепил журнал ниже:
Журнал прилагается
SearchFragment.java
public class SearchFragment extends Fragment implements SearchView.OnQueryTextListener {
View rootView;
private ListView list;
private ListViewAdapter adapter;
private SearchView editsearch;
private ArrayList<String> userList;
public static ArrayList<User> userArrayList = new ArrayList<User>();
DatabaseReference ref;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_search, container, false);
userList=new ArrayList<>();
userList.add("");
list = (ListView) rootView.findViewById(R.id.listview);
userArrayList = new ArrayList<>();
for (int i = 0; i < userList.size(); i++) {
User user = new User(userList.get(i));
// Binds all strings into an array
userArrayList.add(user);
}
ref= FirebaseDatabase.getInstance().getReference("Users");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
userList.remove(0);
for (DataSnapshot data : dataSnapshot.getChildren()){
User U = data.getValue(User.class);
Log.d("DATAIN onDATACHANGE",U.getArdNo());
userList.add(U.getArdNo());
}
userArrayList.clear();
for (int i = 0; i < userList.size(); i++) {
User user = new User(userList.get(i));
// Binds all strings into an array
userArrayList.add(user);
}
adapter = new ListViewAdapter(getContext());
// Binds the Adapter to the ListView
list.setAdapter(adapter);
// Pass results to ListViewAdapter Class
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
adapter = new ListViewAdapter(getContext());
// Binds the Adapter to the ListView
list.setAdapter(adapter);
// Locate the EditText in listview_main.xml
editsearch = (SearchView) rootView.findViewById(R.id.search);
editsearch.setOnQueryTextListener(this);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Toast.makeText(Search.this, userArrayList.get(position).getArdNo(), Toast.LENGTH_SHORT).show();
}
});
return inflater.inflate(R.layout.fragment_search, container, false);
}
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
String text = newText;
adapter.filter(text);
return false;
}
}
ListViewAdapter.java
public class ListViewAdapter extends BaseAdapter {
// Declare Variables
Context mContext;
LayoutInflater inflater;
private ArrayList<User> arraylist;
public ListViewAdapter(Context context ) {
mContext = context;Log.d("DATAIN LISTVIEWADAPTER","TEST");
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.arraylist = new ArrayList<User>();
this.arraylist.addAll(Search.userArrayList);
}
public class ViewHolder {
TextView name;
}
@Override
public int getCount() {Log.d("DATAIN getCount","TEST");
return Search.userArrayList.size();
}
@Override
public User getItem(int position) {
return Search.userArrayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(final int position, View view, ViewGroup parent) {
final ViewHolder holder;
if (view == null) {Log.d("DATAIN getView","TEST");
holder = new ViewHolder();
view = inflater.inflate(R.layout.listview_item, null);
// Locate the TextViews in listview_item.xml
holder.name = (TextView) view.findViewById(R.id.name);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
// Set the results into TextViews
Log.d("THISIS","TEST");
holder.name.setText(Search.userArrayList.get(position).getArdNo());
return view;
}
// Filter Class
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
Search.userArrayList.clear();
if (charText.length() == 0) {
Search.userArrayList.addAll(arraylist);
} else {
for (User wp : arraylist) {
if (wp.getArdNo().toLowerCase(Locale.getDefault()).contains(charText)) {
Search.userArrayList.add(wp);
}
}
}
notifyDataSetChanged();
}
}
фрагмент_поиск.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SearchFragment">
<SearchView
android:id="@+id/search"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="55dp"
android:iconifiedByDefault="false">
<requestFocus />
</SearchView>
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/search"
tools:visibility="visible" /> </FrameLayout>
listview_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /></RelativeLayout>