【问题标题】:why listview getcount() is equal to zero?为什么listview getcount() 等于零?
【发布时间】:2020-05-04 18:52:42
【问题描述】:

我在计算 ListView 中的项目数时遇到问题。 我正在将值推送到 firebase 数据库中的文件夹中。当我将它们拉到一个单独的活动中时,我会得到一个我 push 的值的列表。 问题是我想知道列表有多少项目。我尝试使用 listView.getCount() 以及 arrayList.size() 并且都显示为零,即使在列表本身中我确实看到了这些值。为什么会这样?

这是我的 Java 代码:

     list = (ListView) findViewById(R.id.listViewId2);
        check2 = findViewById(R.id.check3);

        arrayList = new ArrayList<String>();
        keyList = new ArrayList<String>();
        arrayAdapter = new ArrayAdapter<String>(recommendations_weight.this ,android.R.layout.simple_list_item_1,arrayList);
        list.setAdapter(arrayAdapter);

        mDatabase = FirebaseDatabase.getInstance();
        mAuth = FirebaseAuth.getInstance();


        mDatabaseReference= FirebaseDatabase.getInstance().getReference().child("Recommendations").child("Blood").child("WBC").child("High").child("Weight").child("1");


        mDatabaseReference.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                String value = dataSnapshot.getValue(String.class);
                arrayList.add(value); // include the scan values
                keyList.add(dataSnapshot.getKey()); //include the id of each tests
                arrayAdapter.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) {

            }
        });


//check if we have item
    if (list.getAdapter().getCount() != 0){
        check2.setText("number");
    }



这是我的 xml -


    <ListView
        android:id="@+id/listViewId2"
        android:layout_width="350dp"
        android:layout_height="200dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="20dp"
        android:visibility="visible"

        android:textAlignment="center" />




    <Button
        android:id="@+id/returnButton"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:text="return to test page"
        android:textAllCaps="false"
        android:background="#60000000"
        android:layout_marginTop="30dp"
        android:textColor="#FFFFFF"
        android:textSize="20dp"
        android:layout_gravity="center_horizontal"
        />

    <TextView
        android:id="@+id/check3"
        android:layout_marginTop="19dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
        android:text="check"
        />

【问题讨论】:

  • 你的适配器类是什么样的?
  • 代码很不清楚,能不能把代码上传到github发链接?也尝试直接在 arrayAdapter 本身上调用该方法。不在名单上。

标签: java android listview arraylist count


【解决方案1】:

当进入异步执行然后立即以同步方式检查是否包含任何项目时,人们根本无法期望 ArrayAdapter 已经被填充。​​

由于您的代码目前可以工作(或者更好地说:不会工作):

  • 一开始是请求远程数据(进入异步执行)。

  • 然后它会立即检查适配器中的项目计数(同步执行)。

  • 然后正在添加项目(异步执行)。

  • 异步执行完成。

异步执行需要回调,否则你将不知道它何时完成。

只需添加详细日志记录,以便了解发生了什么以及按什么顺序

【讨论】:

    【解决方案2】:

    您得到 0 是因为您正在检查 list.getAdapter().getCount()。我认为您想检查包含您传入的数据的任何列表变量(我怀疑它是adapter)。

    所以也许:list.getAdapter.getArrayList().getCount()

    【讨论】:

    • 我想检查我在 ArrayList \ Listview 中有多少器官。我尝试使用您的建议,但在 getArrayList 命令中出现错误。 Andoroid Studio的Adapter类中没有这样的命令。/ tank
    • 我并不感到惊讶。我不知道您的适配器类是什么样的,这就是为什么我要代码并说“也许”。无论是什么,您都需要访问适配器中的列表。
    • 我没有创建自己的 ArrayAdapter 类。我刚刚创建了一个在 listView 和 ArrayList 之间连接我的 arrayAdapter 用户。需要向适配器的内部类添加什么?为什么我设法使用我当前正在使用的 ArrayAdapter 访问列表中的特定值并且不能使用它来计算列表中的值的数量?如果我要自己编写一个新的适配器类,我需要为 ArrayAdapter 的新类包含什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 2019-02-09
    • 2011-02-01
    相关资源
    最近更新 更多