gpt4 book ai didi

java - Listview 只显示每行中的最后一项?

转载 作者:搜寻专家 更新时间:2023-11-01 08:28:56 25 4
gpt4 key购买 nike

我正在从 php 服务器检索对象的 JSON 数组并将其显示在 ListView 上,我能够成功地检索数据并将其存储到 Arraylist 中但是当我试图在 ListView 上显示它时,只有最后一项是显示多次。我正在使用 Volley 回调接口(interface)来存储数据,并使用 ListFragment。这是我的代码:

Server.getDataFromServer(getActivity(), "product.php", new Server.VolleyCallback() {
@Override
public void onSuccessResponse(JSONArray jsonArray) {
try {
for(int i = 0; i<jsonArray.length(); i++){
mProduct.setId(jsonArray.getJSONObject(i).getInt("mId"));
mProduct.setName(jsonArray.getJSONObject(i).getString("mName"));
mProduct.setPrice(jsonArray.getJSONObject(i).getDouble("mPrice"));
mProducts.add(mProduct);

System.out.println(mProducts.get(i));
}

} catch (JSONException e) {
e.printStackTrace();
}
ArrayAdapter<Product> adapter= new ArrayAdapter<>(getActivity(), R.layout.home_list_row, mProducts);
setListAdapter(adapter);
}
}
);

这里是onCreateView

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
listView = (ListView)rootView.findViewById(android.R.id.list);
return rootView;
}

android monitor

ListView

最佳答案

您只创建了一个 Product mProduct 实例

每个 setter 都会覆盖以前的值

mProducts 中你添加了相同的实例 3 次

for(int i = 0; i<jsonArray.length(); i++){
mProduct.setId(jsonArray.getJSONObject(i).getInt("mId"));
mProduct.setName(jsonArray.getJSONObject(i).getString("mName"));
mProduct.setPrice(jsonArray.getJSONObject(i).getDouble("mPrice"));
mProducts.add(mProduct);

System.out.println(mProducts.get(i)); // shows you what you want, because you are in the loop
}

for(Product product: mProducts){
System.out.println(product); // shows, what is realy in the ArrayList. it is always last value
}

你需要的是

for(int i = 0; i<jsonArray.length(); i++){
Product product = new Product();
product.setId(jsonArray.getJSONObject(i).getInt("mId"));
product.setName(jsonArray.getJSONObject(i).getString("mName"));
product.setPrice(jsonArray.getJSONObject(i).getDouble("mPrice"));
mProducts.add(product);

System.out.println(mProducts.get(i));
}

for(Product product: mProducts){
System.out.println(product); // now you have all values
}

关于java - Listview 只显示每行中的最后一项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42188506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com