当前位置: 首页 > 知识库问答 >
问题:

firebase数据回收视图有时什么也不显示

奚才良
2023-03-14

我试图通过使用RecyclerView显示firebase数据。

检索数据很好,我可以在logcat中检查。

有时recyclerview会显示数据,但通常什么也不显示。

当recycleview显示数据时,它很好地反射了firebase数据。

谁能告诉我问题出在哪里??我的xml代码有错误吗?

Java电码

artistData.child(starList[i]).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot starDataSnap) {
        int fanNums = (int) starDataSnap.child("fanNums").getValue(Integer.class);
        int placeNums = (int) starDataSnap.child("placeNums").getValue(Integer.class);

        Log.d("####", finalStarName + fanNums + placeNums);
        drawerStarImage = getResources().getIdentifier(finalStarImgName, "drawable", getActivity().getPackageName());
        ItemStarData itemStarData = new ItemStarData();
        itemStarData.setStarImage(drawerStarImage);
        itemStarData.setStarName(finalStarName);
        itemStarData.setFanNums(fanNums);
        itemStarData.setPlaceNums(placeNums);

        drawerStarList.add(itemStarData);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
    }

});

适配器类代码

public class AdapterStarlist extends RecyclerView.Adapter<AdapterStarlist.ViewHolder>{
    ArrayList<ItemStarData> array;
    Context context;


public AdapterStarlist(ArrayList<ItemStarData> array, Context context) {
    this.array = array;
    this.context =context;
}

@NonNull
@Override
public AdapterStarlist.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_home_starlist,parent,false);
    return new AdapterStarlist.ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull AdapterStarlist.ViewHolder holder, int position) {
    Log.d("####", array.get(position).getStarName());
    holder.Imgstarlist.setImageResource(array.get(position).getStarImage());
    holder.followStarName.setText(String.valueOf(array.get(position).getStarName()));
    holder.starlistfanNum.setText(String.valueOf(array.get(position).getFanNums()));
    holder.starlistPlaceNum.setText(String.valueOf(array.get(position).getPlaceNums()));

}

@Override
public int getItemCount() {
    return array.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {
    ImageView Imgstarlist;
    TextView followStarName;
    TextView starlistfanNum;
    TextView starlistPlaceNum;


    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        Imgstarlist =itemView.findViewById(R.id.Imgstarlist);
        followStarName =itemView.findViewById(R.id.followStarName);
        starlistfanNum =itemView.findViewById(R.id.starlistfanNum);
        starlistPlaceNum =itemView.findViewById(R.id.starlistPlaceNum);

        Imgstarlist.setBackground(new ShapeDrawable(new OvalShape()));
        Imgstarlist.setClipToOutline(true);
    }
}

}

xml代码的一部分

<ScrollView
        android:layout_width="match_parent"
        android:layout_height="480dp"
        android:layout_marginTop="24dp"
        android:fillViewport="true"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/DrawerStarlist"
        >

        <RelativeLayout
            android:id="@+id/rlDrawerStarlist"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/DrawerStarlist">

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/rvDrawerStarlist"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                />


        </RelativeLayout>

    </ScrollView>

共有1个答案

奚曦哲
2023-03-14

看起来您正在将数据添加到DrawerStarList列表中,但没有告诉适配器您已经这样做了。在您将更改通知适配器之前(通过在适配器上调用NotifyDataSetChanged()),它不会为列表重新绘制UI。

因此,通常情况下,这看起来类似于:

artistData.child(starList[i]).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot starDataSnap) {
        ...

        drawerStarList.add(itemStarData);

        adapter.notifyDataSetChanged(); // tell the adapter to repaint its views
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        throw error.toException(); // never ignore errors
    }
});

其中adapter是对用于管理drawerstarlist的适配器的引用。

 类似资料:
  • 我刚开始在firebase工作。我设法上传了文本和图像,但是,我无法检索要显示在回收器视图中的图像,只能检索文本。我用的是毕加索依赖。我已经包括了我的主要活动。java类,该类负责显示从问题“我的适配器”中的firebase检索的回收器视图项。java类和模型类。我相信,在我将图像URI上载到firebase存储时,我可能犯了没有存储图像URI的错误,因此适配器无法检索图像位置。我想这可能是因为我

  • 我正试图添加数据在我的回收视图从火炉。我有带名字的文件(级别级别编号)但没有显示我的活动这是代码: 主要活动水平: 公共类级别活动扩展AppCompat活动{ } 水平调整器 公共类级别适配器扩展了RecyclerView。适配器 }

  • 我在里面使用了。我还将设置为false for 支持较低的API

  • 当我按下后退按钮时,这个ShoppingActivity会被破坏,当我再次访问该activity时,我发现我的回收器视图项目被替换了两次。我该如何解决这个问题? ShoppingActivity.java这里编写的所有代码和volley类也在这里调用,当我按下后退键并再次访问该活动时,我发现我的回收器视图项被替换了 @override protected void onCreate(Bundle

  • 这是我的活动: 卡片xml 活动xml 这是我的自定义适配器 我已经看了很多关于如何让它工作的指南,但它仍然不起作用。有人知道发生了什么事吗?我的版本是25.0。1,并导入所有模块。但它并没有在布局中添加一张卡片。

  • 嗨,我的应用程序不显示广告在Android回收器视图,我想显示广告在我的应用程序的底部,但它没有显示他们,我不想显示原生广告,我只想显示一个单一的横幅在底部。这是一个字典应用程序,使用Sqlite数据库加载数据,原生广告将不适合它。请你帮忙这里是我的代码。主activity.java 下面是我的内容main.xml