除非我输入搜索视图,否则 Recyclerview 不会显示

Recyclerview not showing unless I type in searchview

我已经实现了一些项目的 recyclerview(从 API 下载)。当我 运行 应用程序或转到此片段时,除非我开始在 SearchView 中输入内容,否则我看不到任何项目(searchview 和其他功能的功能正常)

请在此处找到 Gif

我正在使用 Volley 下载数据,使用 Picasso 下载图像。

我哪里错了?

注意:有几次它自然而然地显示项目(但就像 100 次中的 3 次)

这是我的 fragment.xml 布局:

<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="com.example.abed.whitelabel.Fragments.MainFragment">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.v7.widget.SearchView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/search_view">

        </android.support.v7.widget.SearchView>

        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/content_employee_list"></android.support.v7.widget.RecyclerView>

    </LinearLayout>


</FrameLayout>

我的主要部分 MainFragment.java class:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    downloadEmployeeData();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_main, container, false);


    MainFragment.setMainFragment(this);

    sv = (SearchView)view.findViewById(R.id.search_view);
    RecyclerView recyclerView = (RecyclerView)view.findViewById(R.id.content_employee_list);
    mAdapter = new EmployeeAdapter(mainFragment.getContext(), employees_Array);
    //mAdapter = new EmployeeAdapter(this, employees_Array);   this was the old one
    recyclerView.setAdapter(mAdapter);

    //LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
    LinearLayoutManager layoutManager = new LinearLayoutManager(mainFragment.getContext(), LinearLayoutManager.VERTICAL, false);
    recyclerView.setLayoutManager(layoutManager);

    //Events for searching through list
    sv.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            mAdapter.getFilter().filter(newText);
            return false;
        }
    });

    return view;
}
public void downloadEmployeeData() {
    // here I download the data and fill the array
}

public class EmployeeAdapter extends RecyclerView.Adapter<EmployeesDataViewHolder> implements Filterable {

    Context c;
    ArrayList<EmployeesInfo> mEmployeesInfo;
    ArrayList<EmployeesInfo> currentList;

    public EmployeeAdapter(Context c, ArrayList<EmployeesInfo> mEmployeesInfo){
        this.c = c;
        this.mEmployeesInfo = mEmployeesInfo;
        this.currentList = mEmployeesInfo;
    }

    @Override
    public void onBindViewHolder(EmployeesDataViewHolder holder, int position) {
        final EmployeesInfo employee = this.mEmployeesInfo.get(position);
        holder.updateUI(employee);

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MainActivity mainActivity = (MainActivity)getActivity();
                mainActivity.loadDetailsFragment(employee);
            }
        });


    }


    @Override
    public int getItemCount() {
        return mEmployeesInfo.size();
    }


    @Override
    public EmployeesDataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View card = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_employees, parent, false);
        //VolleyGet.getInstance(getA)
        return new EmployeesDataViewHolder(card);
    }



    // FOR search stuff

    @Override
    public Filter getFilter() {
        return FilterHelper.newInstance(currentList,this);
    }

    public void setEmployeesInfo(ArrayList<EmployeesInfo> filteredEmployees)
    {
        this.mEmployeesInfo = filteredEmployees;
    }
}

还有我的 DataViewHolder:

public class EmployeesDataViewHolder extends RecyclerView.ViewHolder{

    private ImageView mainPhoto;
    private TextView firstName;
    private TextView lastName;

    public EmployeesDataViewHolder(View itemView){
        super(itemView);

        mainPhoto = (ImageView)itemView.findViewById(R.id.list_photo);
        firstName = (TextView)itemView.findViewById(R.id.list_firstName);
        lastName = (TextView)itemView.findViewById(R.id.list_lastName);


    }


    public void updateUI(EmployeesInfo employee){

        firstName.setText(employee.getFirstName());
        lastName.setText(employee.getLastName());
        Picasso.with(mainPhoto.getContext()).load(employee.getPhoto()).into(mainPhoto);


    }
}

尝试更新代码中的这么多部分

RecyclerView recyclerView = (RecyclerView)view.findViewById(R.id.content_employee_list);

    //LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        LinearLayoutManager layoutManager = new LinearLayoutManager(mainFragment.getContext(), LinearLayoutManager.VERTICAL, false);
        recyclerView.setLayoutManager(layoutManager);


        mAdapter = new EmployeeAdapter(mainFragment.getContext(), employees_Array);
        //mAdapter = new EmployeeAdapter(this, employees_Array);   this was the old one
        recyclerView.setAdapter(mAdapter);

在 downloadEmployeeData() 函数中下载所有员工数据后,如果没有添加,请添加以下行:

mAdapter.notifyDataSetChanged();

一定是你没有刷新你的适配器,一旦数据被添加到你的 downloadEmployeeData 函数中,当你点击搜索时,你的过滤器代码正在刷新数据。