ArrayAdapter 不适用于 ListView

ArrayAdapter is not working with ListView

现在我正在尝试创建我的第一个 Android 应用程序。 我目前正在研究一个视图名称 Bands,它应该创建一个列表(从 Firebase 数据库导入)并将其 link 到 ListView。 正如你所看到的,我有一个 link 来打印出整个 bandsList,这样我就知道导入的列表很好,而且它是......但是 ListView 没有根据 bandsList 更新,所以我猜适配器有问题。

   public class Bands extends AppCompatActivity {

    ListView listView;
    ArrayList<String>  bandsList = new ArrayList<>();
    ArrayAdapter<String> bandsAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bands);

        listView = findViewById(R.id.bandsListView);
        bandsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, bandsList);
        listView.setAdapter(bandsAdapter);

        final DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Bands");
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot band : dataSnapshot.getChildren()) {
                    String bandName = band.child("Name").getValue(String.class);

                    bandsList.add(bandName);
                    System.out.println("bandsList :" + bandsList);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {


            }
        });
        databaseReference.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                //String BandName =dataSnapshot.getValue(String.class);
                for (DataSnapshot band : dataSnapshot.getChildren()) {
                    String bandName = band.child("Name").getValue(String.class);
                    System.out.println(bandName);
                    bandsList.add(bandName);
                    System.out.println(bandsList);}

            }

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

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

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

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
}

只需在 Firebase-Callback 之后添加 bandsAdapter.notifyDataSetChanged():

@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot band : dataSnapshot.getChildren()) {
        String bandName = band.child("Name").getValue(String.class);
        bandsList.add(bandName); 
        System.out.println("bandsList :" + bandsList);
    }
    bandsAdapter.notifyDataSetChanged();
}

你需要告诉适配器更新两个列表 onDataChange() 和 onChildAdded() 使用 bandsAdapter.notifyDataSetChanged();