【问题标题】:showing RecyclerView on fragment with data from Firebase在带有 Firebase 数据的片段上显示 RecyclerView
【发布时间】:2020-07-19 23:57:34
【问题描述】:

我在使用来自 Firebase 的数据的片段中创建 RecycleView 时遇到问题。我希望应用程序在我单击一个按钮以从一个片段更改为RecycleView 片段后显示RecycleView,但它确实更改了显示的片段但它没有显示任何内容。

我知道有很多这样的问题,但我似乎没有找到解决这个问题的正确方法。

我已经制作了 Firebase RecyclerView 所需的一切,并且还尝试将其构建在 Activity 而不是 Fragment 中,它确实有效,但不适用于 Fragment。 我尝试在 onCreateView 方法、onActivityCreated 和 onViewCreated 方法中初始化适配器和 recyclerview,但它们似乎都没有工作。

这是我的片段代码:

private KidAdapter adapter;
private RecyclerView recyclerView;

Button button;
View view;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.uangsaku_menu_fragment, container, false);
    button = view.findViewById(R.id.btn_add);
    button.setOnClickListener(this);

    recyclerView = view.findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    setUpRecyclerView();

    return view;
}

@Override
public void onClick(View v) {
    if(v.getId() == R.id.btn_add){
        Intent intent = new Intent(getActivity(), Register.class);
        startActivity(intent);
    }

}

public void setUpRecyclerView(){
    Query query = FirebaseDatabase.getInstance().getReference("kids");

    FirebaseRecyclerOptions<kidData> options = new FirebaseRecyclerOptions.Builder<kidData>()
            .setQuery(query, kidData.class)
            .build();

    adapter = new KidAdapter(options);
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false);
    recyclerView.setLayoutManager(linearLayoutManager);
    recyclerView.setAdapter(adapter);
}

@Override
public void onStart() {
    super.onStart();
    if (adapter != null) {
        adapter.startListening();
    }

}

@Override
public void onStop() {
    super.onStop();
    if (adapter != null) {
        adapter.stopListening();
    }

}

}

适配器类

public class KidAdapter extends FirebaseRecyclerAdapter<kidData, KidAdapter.KidViewHolder> {

public KidAdapter(@NonNull FirebaseRecyclerOptions<kidData> options) {
    super(options);
}

@Override
protected void onBindViewHolder(@NonNull KidViewHolder holder, int position, @NonNull kidData model) {
    holder.nama.setText(model.getKidName());
    holder.balance.setText(model.getKidBalance());
    holder.limit.setText("Limit: "+model.getKidLimit());
    holder.spending.setText("Spending xxx.xxx");
}

@NonNull
@Override
public KidViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.kids_card,
            viewGroup, false);
    return new KidViewHolder(v);
}

public class KidViewHolder extends RecyclerView.ViewHolder {

    TextView nama, balance, limit, spending;
    public KidViewHolder(@NonNull View itemView) {
        super(itemView);

        nama = itemView.findViewById(R.id.tv_nama);
        balance = itemView.findViewById(R.id.tv_balance);
        limit = itemView.findViewById(R.id.tv_dailylimit);
        spending = itemView.findViewById(R.id.tv_dailyspending);
    }
}

}

kidData 模型类

public class kidData {
String kidName, kidEmail, kidDoB, kidLimit, kidBalance;

public kidData(){

}

public kidData(String kidName, String kidEmail, String kidDoB, String kidLimit, String kidBalance) {
    this.kidName = kidName;
    this.kidEmail = kidEmail;
    this.kidDoB = kidDoB;
    this.kidLimit = kidLimit;
    this.kidBalance = kidBalance;
}

public String getKidName() {
    return kidName;
}

public String getKidEmail() {
    return kidEmail;
}

public String getKidDoB() {
    return kidDoB;
}

public String getKidLimit() {
    return kidLimit;
}

public String getKidBalance() {
    return kidBalance;
}

}

【问题讨论】:

  • 您是否尝试删除recyclerView.setHasFixedSize(true);?没有它还能用吗?
  • 它的工作原理令人惊叹,虽然它会这么简单:D

标签: java android firebase firebase-realtime-database


【解决方案1】:

您的代码中的问题是使用了以下代码行:

recyclerView.setHasFixedSize(true);

这是因为在使用最新版本的Firebase-UI库时,不需要将RecyclerView的大小设置为固定的。解决此问题的解决方案是简单地删除/注释上面的代码行。就是这样!

【讨论】:

    猜你喜欢
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    相关资源
    最近更新 更多