【问题标题】:Listview displaying only last item in each row?Listview 仅显示每行中的最后一项?
【发布时间】:2017-06-30 12:29:48
【问题描述】:

我正在从 php 服务器检索对象的 JSON 数组并将其显示在 ListView 上,我成功地能够检索数据并将其存储到 Arraylist 但是当我尝试在 ListView 上显示它时,只有最后一个项目是多次显示。 我正在使用 Volley 回调接口来存储数据, 并使用 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

【问题讨论】:

    标签: java android listview android-volley


    【解决方案1】:

    您只创建了一个 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
    }
    

    【讨论】:

    • 像魅力一样工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    相关资源
    最近更新 更多