如何正确连接并显示从 Firebase 到自定义列表视图 Android Studio 的数据

Posted

技术标签:

【中文标题】如何正确连接并显示从 Firebase 到自定义列表视图 Android Studio 的数据【英文标题】:How to properly connect and display data from Firebase to custom list view Android Studio 【发布时间】:2019-03-28 00:11:34 【问题描述】:

我有一个自定义 ListView,它显示了我的 Firebase 中的数据,但它不正确。

Image of Current Output

Image of Database Structure

正如您在图像中看到的,它在一行“[a,ab,abc]”中显示所有数据。这是错误的,因为我需要像这样每行显示它。

一个

ab

abc

我将从 firebase 获取的数据保存在一个数组列表中

private ArrayList<String> arrayList = new ArrayList<String>();

我使用 addChildEventListener 保存了它

 mDatabase.addChildEventListener(new ChildEventListener() 
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) 

            String string = dataSnapshot.getValue(String.class);

            arrayList.add(string);

            customAdapter.notifyDataSetChanged();



        

        @Override
        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) 

        

        @Override
        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) 

        

        @Override
        public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) 

        

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) 

        

    );

这是我制作自定义适配器的方法

public class CustomListAdapter extends ArrayAdapter<String>

    @Override
    public int getCount() 
        return arrayList.size();
    

    private final Activity context;
   private final Integer[] imgid;

    private final ArrayList<String> arrayList;

    public CustomListAdapter(Activity context, ArrayList<String> arrayList, Integer[] imgid) 
        super(context, R.layout.customlayout);
        // TODO Auto-generated constructor stub

        this.context=context;
        this.arrayList = arrayList;

        //this.itemname=itemname;
        this.imgid=imgid;


    

    public View getView(int position,View view,ViewGroup parent) 
        LayoutInflater inflater=context.getLayoutInflater();
        View rowView=inflater.inflate(R.layout.customlayout, null,true);

        ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView);
        TextView txtTitle = (TextView) rowView.findViewById(R.id.textView_name);


        txtTitle.setText(arrayList.toString());
        imageView.setImageResource(imgid[position]);

        return rowView;

    

然后我在 OnCreate 中声明了自定义适配器

customAdapter = new CustomListAdapter(Form1Main.this, arrayList, imgid);

现在我只需要正确地垂直迭代它,而不是像第一张图片中的输出 [a,ab,abc] 到

一个


ab


abc

【问题讨论】:

请不要发布代码截图。如果您想在问题中发布特定代码块,请将其复制并粘贴到帖子正文中,如果尚未正确格式化,请使用 按钮将其格式化为代码。请edit your post. 好的 tnx。我会编辑它 请添加您的数据库结构,也请回复@。 我刚刚添加了我的数据库结构的图像@AlexMamo 【参考方案1】:

我将向您展示一种更简单的方法来实现这一点。因此,要在单独的行中显示这些值,请使用以下代码:

ValueEventListener valueEventListener = new ValueEventListener() 
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) 
        ArrayList<String> arrayList = new ArrayList<String>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) 
            String string = ds.getValue(String.class);
            arrayList.add(string);
            Log.d(TAG, string);
        
        CustomListAdapter customAdapter = new CustomListAdapter(Form1Main.this, arrayList, imgid);
        yourListView.setAdapter(customAdapter);
    

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) 
        Log.d(TAG, databaseError.getMessage());
    
;
producmDatabasetsRef.addListenerForSingleValueEvent(valueEventListener);

请同时检查 logcat。

【讨论】:

嗨布拉德利!你有没有试过我上面的解决方案,它有效吗?

以上是关于如何正确连接并显示从 Firebase 到自定义列表视图 Android Studio 的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 Arraylist 显示到自定义 ArrayAdapter

将 FirebaseUser 映射到自定义用户对象

将图像异步加载到自定义 UITableViewCell 部分工作

jqgrid更改子网格的位置或将子网格图标添加到自定义列而不是其他任何地方?

jqgrid 更改子网格的位置或将子网格图标添加到自定义列而不是其他任何地方?

如何添加到自定义列表视图用户控制编辑项目列组等任务?