java - 如何将RecyclerView放入Fragment中?

标签 java android android-fragments android-recyclerview

我对 Android 开发还是个新手。目前,我正在尝试在 fragment 中显示 RecyclerView。我尝试在不使用 Fragment 的情况下显示 RecyclerView,效果很好。但是当使用Fragment时,什么也没有显示。

ScreenShot

这是包含 fragment 的MainActivity:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //ButterKnife.bind(this);
        BottomNavigationView navView = findViewById(R.id.nav_view);

        navView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);

        mViewModel = ViewModelProviders.of(this).get(MainActivityViewModel.class);

        mFragmentManager = getSupportFragmentManager();
        mFragmentTransaction = mFragmentManager.beginTransaction();
        mFragmentTransaction.add(R.id.fragment_container, missionListFragment).addToBackStack(null).commit();
    }

以及 Fragment 的 onCreateView 方法:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View rootView = inflater.inflate(R.layout.fragment_mission_list, container, false);
        //ButterKnife.bind(rootview);
        mRecycler = (RecyclerView) rootView.findViewById(R.id.recycler);

        mFirestore = FirebaseFirestore.getInstance();
        mQuery = mFirestore.collection("COLLECTION_NAME").limit(LIMIT);

        if (mQuery == null) {
            Log.w(TAG, "No query, not initializing RecyclerView. Created data on server.");
        }

        mAdapter = new RecyclerViewAdapter(mQuery, this) {

            @Override
            protected void onDataChanged() {

            }

            @Override
            protected void onError(FirebaseFirestoreException e) {
                // Show a snackbar on errors
                Snackbar.make(getActivity().findViewById(android.R.id.content),
                        "Error: check logs for info.", Snackbar.LENGTH_LONG).show();
            }
        };
        mRecycler.setLayoutManager(new LinearLayoutManager(getActivity()));
        mRecycler.setAdapter(mAdapter);

        return rootView;
    }

使用RecyclerViewAdapter:

public class RecyclerViewAdapter extends FirestoreAdapter<RecyclerViewAdapter.ViewHolder> {

    private static final int UNAVAILABLE = 0, AVAILABLE = 1;

    public interface OnItemSelectedListener {

        void onItemSelected(DocumentSnapshot item);

    }

    private OnItemSelectedListener mListener;

    public RecyclerViewAdapter(Query query, OnItemSelectedListener listener) {
        super(query);
        mListener = listener;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        return new ViewHolder(inflater.inflate(R.layout.item, parent, false));
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.bind(getSnapshot(position), mListener);
    }

    static class ViewHolder extends RecyclerView.ViewHolder {

        @BindView(R.id.view1)
        TextView view1;

        @BindView(R.id.view2)
        TextView view2;

        @BindView(R.id.view3)
        TextView view3;

        @BindView(R.id.view4)
        TextView view4;

        public ViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        }

        public void bind(final DocumentSnapshot snapshot,
                         final OnItemSelectedListener listener) {

            Item item = snapshot.toObject(Item.class);
            Resources resources = itemView.getResources();

            view1.setText(item.getfield1());
            view2.setText(Integer.toString(item.getfield2()));
            if(item.getfield3() == AVAILABLE)
                view3.setText("Available");
            else
                view3.setText("Unavailable");
            view4.setText(item.getfield4().toString());

            // Click listener
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (listener != null) {
                        listener.onItemSelected(snapshot);
                    }
                }
            });
        }

    }
}

正如您在上面注意到的,我从 Firebase 获取数据并将它们显示为 RecyclerView。但我认为不是查询数据为空的问题,所以请帮忙。

最佳答案

可能是没有检索到 Firebase 中的数据,因此没有内容可供 recyclerview 显示。请检查您的 Firebase 连接是否工作正常并且您正在从中检索某些内容

关于java - 如何将RecyclerView放入Fragment中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55974894/

相关文章:

java - Gplus 用户身份验证和在同一 Activity 中获取用户位置

java - Java 中的红黑树或 AVL 树实现

android - 我们可以在不损失任何值(value)的情况下使用 LiveData 吗?

android - 操作栏下拉打开和关闭项目样式

android - 根据行为在不同的 fragment 上使用相同的工具栏折叠工具栏布局

java - 如何设计该类,该类将被多个线程访问。

java - 如何将 jscolor 选择器设置为 bs 按钮

android - 无法解析 : FragmentManager. FindFragmentById<MapFragment>

android - CircleCI 2.0 : Error unmarshaling return header; nested exception is:

android - 滑动tabs的时候,fragment的oncreateView没有被调用,怎么每次都调用oncreateView