java - 当数据从 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 什么也没显示....任何想法,为什么以及我应该改变什么?(如果我像以前一样硬编码“以色列”,它会再次正常工作!)
解决方案
推荐阅读
- python - 从数据框 (1-7) 创建唯一列表,使用不同工作表上的数据框 1-7 中的数据创建单独的 excel 文件?
- javascript - 如何将字符串列表附加到反应中的文本区域,redux-form作为列表?
- c - 读取 .bin 文件的某些部分(例如,从 11 日 23 日开始):将十六进制转换为 int、char 字符串。C
- razor - 标准 ASP.Net Core 标签助手不是紫色和粗体
- javascript - 如何使用 jQuery Validate 验证 bootstrap-datetimepicker
- python - Python 3 上的 Werkzeug 引发“< 在 str 和 int 的实例之间不支持”
- c# - RadioButtonFor 始终将 true 传递给 MVC 控制器
- wordpress - WC:如何通过 billing_phone 或 billing_email 搜索客户
- python - Python 3:生成进程子类
- intellij-idea - Ant - 脚本中哪里出现了错误?