使用来自 Firebase 的数据在片段上显示 RecyclerView [英] showing RecyclerView on fragment with data from Firebase

查看:21
本文介绍了使用来自 Firebase 的数据在片段上显示 RecyclerView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm having a problem with making a RecycleView in a fragment with data from Firebase. I expect the app to show the RecycleView after I clicked on a button to change from one fragment to the RecycleView fragment, but it does change the showed fragment but it does not show anything.

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

I know there are plenty of questions like this but I don't seem to find the correct solution to this problem.

我已经制作了 Firebase RecyclerView 所需的一切,并且还尝试在活动中构建它而不是片段,它确实有效,但不能与片段一起使用.我尝试在 onCreateView 方法、onActivityCreated 和 onViewCreated 方法中初始化适配器和 recyclerview,但它们似乎都没有工作.

I've made everything needed for a Firebase RecyclerView, and also tried to build it inside an activity instead fragment and it did work, but not with the fragment. I've tried to initialize the adapter and recyclerview inside the onCreateView method, onActivityCreated, and onViewCreated method and none of them seem to be working.

这是我的片段代码:

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 模型类

The kidData model class

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;
}

}

推荐答案

你代码中的问题是使用了下面这行代码:

The problem in your code is the use of the following line of code:

recyclerView.setHasFixedSize(true);

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

And this is because when using the latest version of Firebase-UI library, there is no need to set the size of the RecyclerView as fixed. The solution for solving this problem is to simply remove/comment the above line of code. That's it!

这篇关于使用来自 Firebase 的数据在片段上显示 RecyclerView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆