填充 ListView 列表
Populate ListView list
我正在尝试在 Android Studio 中创建一个 ListView activity。
该应用程序已连接到云 Firestore.What 我想要的是从云中获取数据,将“名称”和“分数”存储在用户的 ArrayList 中。
这工作正常,添加了用户。然后我想从此列表中获取项目并将它们添加到包含字符串的新 ArrayList 中,并将该列表传递给 ListView 以显示数据。
这样,usersStringList 将为空。如果我手动添加一些项目,它会工作并且 ListView 会显示元素。
public class ListActivity extends AppCompatActivity {
Button restartButton;
public ListView list;
public List<Users> usersList = new ArrayList<Users>();
public List<String> usersStringList = new ArrayList<String>();
FirebaseFirestore db=FirebaseFirestore.getInstance();
@Override
protected void onCreate(Bundle savedInstanceState) {
getUsersList();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
restartButton = findViewById(R.id.restart_button);
list = findViewById(R.id.list);
/*usersStringList.add("some text added manually");
usersStringList.add("other text added manually");*/
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, usersStringList);
list.setAdapter(arrayAdapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String clickedItem = (String) list.getItemAtPosition(position);
Toast.makeText(ListActivity.this, clickedItem, Toast.LENGTH_LONG).show();
}
});
restartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ListActivity.this, CategoryActivity.class);
ListActivity.this.startActivity(intent);
ListActivity.this.finish();
}
});
}
private void getUsersList() {
db.collection("USERS")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d("TAG", document.getId() + " => " + document.getData());
Users user=new Users(document.getString("NAME"),Integer.valueOf(document.getString("SCORE")));
usersList.add(user);
}
setUpList();
} else {
Log.w("TAG", "Error getting documents.", task.getException());
}
}
});
}
private void setUpList() {
for (int i = 0; i < usersList.size(); i++) {
usersStringList.add(i + 1 + ". place: " + usersList.get(i).username + ". Score: " + usersList.get(i).score);
}
}
我应该怎么做才能用数据填充 usersStringList?
您可以在数据从云返回时实例化适配器,通常在 setUpList()
中,或者您可以将适配器作为 class 字段,然后调用 arrayAdapter.notifyDataSetChanged()
在 setUpList()
将第一个选项应用于您的代码:
public class ListActivity extends AppCompatActivity {
Button restartButton;
public ListView list;
public List<Users> usersList = new ArrayList<Users>();
public List<String> usersStringList = new ArrayList<String>();
FirebaseFirestore db=FirebaseFirestore.getInstance();
@Override
protected void onCreate(Bundle savedInstanceState) {
getUsersList();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
restartButton = findViewById(R.id.restart_button);
list = findViewById(R.id.list);
/*usersStringList.add("some text added manually");
// usersStringList.add("other text added manually");*/
// ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, usersStringList);
// list.setAdapter(arrayAdapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String clickedItem = (String) list.getItemAtPosition(position);
Toast.makeText(ListActivity.this, clickedItem, Toast.LENGTH_LONG).show();
}
});
restartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ListActivity.this, CategoryActivity.class);
ListActivity.this.startActivity(intent);
ListActivity.this.finish();
}
});
}
private void getUsersList() {
db.collection("USERS")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d("TAG", document.getId() + " => " + document.getData());
Users user=new Users(document.getString("NAME"),Integer.valueOf(document.getString("SCORE")));
usersList.add(user);
}
setUpList();
} else {
Log.w("TAG", "Error getting documents.", task.getException());
}
}
});
}
private void setUpList() {
for (int i = 0; i < usersList.size(); i++) {
usersStringList.add(i + 1 + ". place: " + usersList.get(i).username + ". Score: " + usersList.get(i).score);
}
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, usersStringList);
list.setAdapter(arrayAdapter);
}
}
我正在尝试在 Android Studio 中创建一个 ListView activity。 该应用程序已连接到云 Firestore.What 我想要的是从云中获取数据,将“名称”和“分数”存储在用户的 ArrayList 中。 这工作正常,添加了用户。然后我想从此列表中获取项目并将它们添加到包含字符串的新 ArrayList 中,并将该列表传递给 ListView 以显示数据。 这样,usersStringList 将为空。如果我手动添加一些项目,它会工作并且 ListView 会显示元素。
public class ListActivity extends AppCompatActivity {
Button restartButton;
public ListView list;
public List<Users> usersList = new ArrayList<Users>();
public List<String> usersStringList = new ArrayList<String>();
FirebaseFirestore db=FirebaseFirestore.getInstance();
@Override
protected void onCreate(Bundle savedInstanceState) {
getUsersList();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
restartButton = findViewById(R.id.restart_button);
list = findViewById(R.id.list);
/*usersStringList.add("some text added manually");
usersStringList.add("other text added manually");*/
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, usersStringList);
list.setAdapter(arrayAdapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String clickedItem = (String) list.getItemAtPosition(position);
Toast.makeText(ListActivity.this, clickedItem, Toast.LENGTH_LONG).show();
}
});
restartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ListActivity.this, CategoryActivity.class);
ListActivity.this.startActivity(intent);
ListActivity.this.finish();
}
});
}
private void getUsersList() {
db.collection("USERS")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d("TAG", document.getId() + " => " + document.getData());
Users user=new Users(document.getString("NAME"),Integer.valueOf(document.getString("SCORE")));
usersList.add(user);
}
setUpList();
} else {
Log.w("TAG", "Error getting documents.", task.getException());
}
}
});
}
private void setUpList() {
for (int i = 0; i < usersList.size(); i++) {
usersStringList.add(i + 1 + ". place: " + usersList.get(i).username + ". Score: " + usersList.get(i).score);
}
}
我应该怎么做才能用数据填充 usersStringList?
您可以在数据从云返回时实例化适配器,通常在 setUpList()
中,或者您可以将适配器作为 class 字段,然后调用 arrayAdapter.notifyDataSetChanged()
在 setUpList()
将第一个选项应用于您的代码:
public class ListActivity extends AppCompatActivity {
Button restartButton;
public ListView list;
public List<Users> usersList = new ArrayList<Users>();
public List<String> usersStringList = new ArrayList<String>();
FirebaseFirestore db=FirebaseFirestore.getInstance();
@Override
protected void onCreate(Bundle savedInstanceState) {
getUsersList();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
restartButton = findViewById(R.id.restart_button);
list = findViewById(R.id.list);
/*usersStringList.add("some text added manually");
// usersStringList.add("other text added manually");*/
// ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, usersStringList);
// list.setAdapter(arrayAdapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String clickedItem = (String) list.getItemAtPosition(position);
Toast.makeText(ListActivity.this, clickedItem, Toast.LENGTH_LONG).show();
}
});
restartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ListActivity.this, CategoryActivity.class);
ListActivity.this.startActivity(intent);
ListActivity.this.finish();
}
});
}
private void getUsersList() {
db.collection("USERS")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d("TAG", document.getId() + " => " + document.getData());
Users user=new Users(document.getString("NAME"),Integer.valueOf(document.getString("SCORE")));
usersList.add(user);
}
setUpList();
} else {
Log.w("TAG", "Error getting documents.", task.getException());
}
}
});
}
private void setUpList() {
for (int i = 0; i < usersList.size(); i++) {
usersStringList.add(i + 1 + ". place: " + usersList.get(i).username + ". Score: " + usersList.get(i).score);
}
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, usersStringList);
list.setAdapter(arrayAdapter);
}
}