Listview во фрагменте не отображается, но при использовании в других действиях он работает - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть фрагмент, который состоит из панели поиска (не на панели инструментов), которая ищет "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>
...