2017-02-18 144 views
0

我想用firebase查询中的数据填充我的列表视图。我的代码:从firebase查询创建列表视图

public class ShowGoalsListActivity extends AppCompatActivity { 

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference messages = mDatabase.child("messages"); 
ArrayList<String> NameList = new ArrayList<String>();; 
public void onCreate(Bundle saveInstanceState) 
{ 
    super.onCreate(saveInstanceState); 
    setContentView(R.layout.goals_list); 
    ListView animalList=(ListView)findViewById(R.id.listViewAnimals); 

    getNames(); 

    ArrayAdapter<String> arrayAdapter = 
      new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, NameList); 
    animalList.setAdapter(arrayAdapter); 

    animalList.setOnItemClickListener(new AdapterView.OnItemClickListener() 
    { 
     public void onItemClick(AdapterView<?> arg0, View v,int position, long arg3) 
     { 
      String selectedAnimal=NameList.get(position); 
      Toast.makeText(getApplicationContext(), "Animal Selected : "+selectedAnimal, Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

void getNames() 
{ 

    Query queryRef = messages.orderByChild("pages"); 
    queryRef.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      Map data = (Map) dataSnapshot.getValue(); 
      String name = (String) data.get("name"); 
      NameList.add(name); 
     } 
     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot){ 
     } 
     @Override 
     public void onCancelled(DatabaseError databaseError){} 
     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s1){} 
     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s2){} 
    }); 
} 
} 

但是,当我去我的布局这个列表视图是空的。但是,如果我然后去另一个布局,然后回到goals_list layout listview包含我需要的所有元素。什么可能是一个问题?

回答

1

数据是从Firebase异步加载的。要提醒Android需要重新绘制列表视图,必须在更改适配器的数据后调用notifyDataSetChanged()

public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
     Map data = (Map) dataSnapshot.getValue(); 
     String name = (String) data.get("name"); 
     NameList.add(name); 
     arrayAdapter.notifyDataSetChanged(); 
    } 

为了使这项工作,你需要做arrayAdapter到`活动的成员字段:

public class ShowGoalsListActivity extends AppCompatActivity { 
    ArrayAdapter<String> arrayAdapter; 
    ... 
+0

谢谢!它的工作原理 – DzouSi

+0

很好听。如果我的回答很有用,请点击左侧的upvote按钮。如果它回答了您的问题,请点击复选标记以接受它。这样别人就知道你已经(充分)帮助了。 –