首页 > 解决方案 > 当数据从 Activity 传递到 Fragment 时, Fragment 中的 RecycleView 什么也不显示

问题描述

我在 Fragment 中有 Firebase RecycleView。它工作正常。代码如下:

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

        //The next code is working on displaying all users coins per country
        banknotesList = (RecyclerView) view.findViewById(R.id.banknotes_list);
        banknotesList.setHasFixedSize(true);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(view.getContext(), LinearLayoutManager.VERTICAL, false);
        linearLayoutManager.setReverseLayout(true);
        linearLayoutManager.setStackFromEnd(true);
        banknotesList.setLayoutManager(linearLayoutManager);

        DisplayAllCoins("russia");

        return view;
 }

    private void DisplayAllCoins(final String country_Key) {
        //Toast.makeText(getContext(), ""+country_Key, Toast.LENGTH_SHORT).show();
        final DatabaseReference coinsTotalRef = FirebaseDatabase.getInstance().getReference().child("admin").child("world_currency").child("year_title_data").child(country_Key);
        Query SortStoriesInDecendingOrder = coinsTotalRef.orderByChild("year_id");

        FirebaseRecyclerOptions<Banknotes> options =
                new FirebaseRecyclerOptions.Builder<Banknotes>()
                        .setQuery(SortStoriesInDecendingOrder, Banknotes.class)
                        .build();


        FirebaseRecyclerAdapter<Banknotes, BanknotesYearViewHolder> adapter =
                new FirebaseRecyclerAdapter<Banknotes, BanknotesYearViewHolder>(options) {
                    @Override
                    public void onBindViewHolder(@NonNull final BanknotesYearViewHolder viewHolder, int position, @NonNull Banknotes model) {
                        final String Year_Key = getRef(position).getKey();

                        viewHolder.setBanknote_year(model.getBanknote_year());
                        viewHolder.setCurrency(model.getCurrency());
                        viewHolder.setDenomination(model.getDenomination());
                        viewHolder.setComposition(model.getComposition());
                        viewHolder.setColor(model.getColor());
                    }

                    @NonNull
                    @Override
                    public BanknotesYearViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
                        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.activity_world_currency_year_banknotes_data, viewGroup, false);
                        BanknotesYearViewHolder viewHolder = new BanknotesYearViewHolder(view);
                        return viewHolder;
                    }
                };
        banknotesList.setAdapter(adapter);
        adapter.startListening();


    }

但在这种情况下,我写了硬编码的国家名称:俄罗斯。我想从这样的另一个活动中获取国家名称:

我发送的活动代码:

        FragmentBanknotes fragmentBanknotes=new FragmentBanknotes();
        Bundle banknotes=new Bundle();
        banknotes.putString("data","israel");
        fragmentBanknotes.setArguments(banknotes);
        getSupportFragmentManager().beginTransaction().replace(R.id.view_pager,fragmentBanknotes).commit();

现在我更新的片段代码:


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

        //The next code is working on displaying all users coins per country
        banknotesList = (RecyclerView) view.findViewById(R.id.banknotes_list);
        banknotesList.setHasFixedSize(true);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(view.getContext(), LinearLayoutManager.VERTICAL, false);
        linearLayoutManager.setReverseLayout(true);
        linearLayoutManager.setStackFromEnd(true);
        banknotesList.setLayoutManager(linearLayoutManager);


        if(getArguments()!=null) {

            String country_Key = getArguments().getString("data").toLowerCase();
            DisplayAllCoins(country_Key);

        }
        

        return view;
 }

    private void DisplayAllCoins(final String country_Key) {
        Toast.makeText(getContext(), ""+country_Key, Toast.LENGTH_SHORT).show();
        final DatabaseReference coinsTotalRef = FirebaseDatabase.getInstance().getReference().child("admin").child("world_currency").child("year_title_data").child(country_Key);
        Query SortStoriesInDecendingOrder = coinsTotalRef.orderByChild("year_id");

        FirebaseRecyclerOptions<Banknotes> options =
                new FirebaseRecyclerOptions.Builder<Banknotes>()
                        .setQuery(SortStoriesInDecendingOrder, Banknotes.class)
                        .build();


        FirebaseRecyclerAdapter<Banknotes, BanknotesYearViewHolder> adapter =
                new FirebaseRecyclerAdapter<Banknotes, BanknotesYearViewHolder>(options) {
                    @Override
                    public void onBindViewHolder(@NonNull final BanknotesYearViewHolder viewHolder, int position, @NonNull Banknotes model) {
                        final String Year_Key = getRef(position).getKey();

                        viewHolder.setBanknote_year(model.getBanknote_year());
                        viewHolder.setCurrency(model.getCurrency());
                        viewHolder.setDenomination(model.getDenomination());
                        viewHolder.setComposition(model.getComposition());
                        viewHolder.setColor(model.getColor());
                    }

                    @NonNull
                    @Override
                    public BanknotesYearViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
                        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.activity_world_currency_year_banknotes_data, viewGroup, false);
                        BanknotesYearViewHolder viewHolder = new BanknotesYearViewHolder(view);
                        return viewHolder;
                    }
                };
        banknotesList.setAdapter(adapter);
        adapter.startListening();


    }

我正在检查 Toast,我看到,参数“israel”是从另一个活动成功传递的,但现在 recycleView 什么也没显示....任何想法,为什么以及我应该改变什么?(如果我像以前一样硬编码“以色列”,它会再次正常工作!)

标签: javaandroid-fragmentsandroid-activityandroid-recyclerview

解决方案


推荐阅读