当前位置: 首页 > 面试题库 >

使用Firebase中的数据在片段上显示RecyclerView

呼延鹏云
2023-03-14
问题内容

我在RecycleView用Firebase的数据制作片段时遇到问题。我希望应用程序RecycleView在单击按钮以从一个片段更改为RecycleView片段后显示,但是它确实更改了所显示的片段,但未显示任何内容。

我知道有很多这样的问题,但是我似乎找不到正确的解决方案。

我已经制作了Firebase
RecyclerView所需的所有内容,并且还尝试将其构建在活动而不是片段中,并且确实可以,但是不能与片段一起使用。我试图初始化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);

这是因为在使用最新版本的Firebase-UI库时,无需将RecyclerView固定为。解决此问题的方法是简单地删除/注释上述代码行。而已!



 类似资料:
  • 好的,所以我让它运行,显示用户ID,但不得分。然后我开始做一些改变,忘记了我改变了什么,现在我又回到了null null。我觉得我可能删掉了什么或者拼错了什么。 下面是我的模型: 数据库:链接到我的数据库屏幕截图

  • 我试图在片段中填充一个具有自定义布局的listView。但是,当我启动应用程序时,listview的内容没有加载(这是使用数组适配器获得的)。下面是加载listView的代码: 这里是我的CustomAdapter的代码: } 这是列表项布局的xml: 这里是主要布局: 我没有收到任何错误消息,但是当我启动应用程序时,listView中没有显示任何项目,并且永远不会调用我的适配器的getView方

  • 我正在开发包含2个片段的应用程序,我想根据需要显示隐藏。下面的代码有一个简单的例子来说明我的问题。这个简单的Fragmentactivity包含一个按钮和一个listfragment。 这个简单的例子完美无瑕。但我不满足于展示隐藏片段。如果删除布局。设置可见性(View.GONE);然后从代码中选择ft.hide(f);不会隐藏碎片。事实上,我们不是在隐藏片段,而是在隐藏容器。 我的问题是,这是一

  • 喂! 我一直在做一个web项目,用户可以注册和登录。我也想添加一个配置文件,他们提供的一些信息可以在“配置文件”页面上显示。 我已经使用firebase auth(与电子邮件和密码)和rt数据库存储额外的信息,如‘姓名','生物’等。 我已经尝试过这里其他问题的解决方案,但似乎没有一个对我有效。 下面是我的数据库的外观: 下面是配置文件页面的一些代码: 当我测试代码时,我在控制台上得到了这个错误:

  • 我已经实现了ActionBarsherlock的示例com.actionBarsherlock.sample.fragments,所有这些都工作得很好,直到当所选选项卡有子片段时设备方向发生变化。 一切都好: 一切都很好,可以旋转设备没有问题。现在,如果我在Fragment2中选择一个列表项来推入Fragment2Child1,在我旋转设备之前,一切都是好的。 设备旋转时不良: tab1->Fra

  • 我有一个活动应用程序,底部有导航标签,使用Android架构导航组件。 以下是其中一个片段的代码: 它有两个可能的版本(一个是带有数据绑定的版本,注释为)。 没有数据绑定的当前版本可以正常工作,但是有数据绑定的版本会全屏显示片段,而不是在androidx中显示片段。航行碎片这是我主要活动的一部分。数据绑定是有效的,我的问题是片段全屏显示,试图通过编程从该片段导航是无效的。所以在这种情况下,数据绑定