【问题标题】:ArrayAdapter is not working with ListViewArrayAdapter 不适用于 ListView
【发布时间】:2018-04-23 22:46:15
【问题描述】:

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

   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) {

            }
        });
    }
}

【问题讨论】:

  • 澄清一下,bandList ListView 是空的。该应用程序运行正常,但列表未更新。

标签: java android listview adapter


【解决方案1】:

只需在 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();
}

【讨论】:

    【解决方案2】:

    您需要告诉适配器在两者中更新列表 onDataChange() 和 onChildAdded() 使用bandsAdapter.notifyDataSetChanged();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      相关资源
      最近更新 更多