带有JSONArray和JSONObject的ListView setOnItemClickListener

时间:2018-02-11 11:24:18

标签: android json listview

我遇到listView的setOnItemClickListener问题。

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                ItemClick();
            }
        });

和ItemClick:

private int ItemClick (){
    try {
        JSONArray ja=new JSONArray(data);
        JSONObject jo=null;

        for(int i=0;i<ja.length();i++)
        {
            jo=ja.getJSONObject(i);
            String nr_telefon=jo.getString("nr_telefon");

            Toast.makeText(MainActivity.this,nr_telefon,Toast.LENGTH_SHORT).show();

        }

        return 1;
    } catch (JSONException e) {
        e.printStackTrace();
    }

    return 0;

}

问题是返回不起作用(我认为)当我点击listView中的项目时,就像我点击了所有项目一样。点击将显示所有与第一项到最后一项的nr_telefon的吐司。问题是什么以及如何解决?

列表视图中的一个项目是这样创建的:

 String  nr_masina=jo.getString("nr_masina");
   String proprietar=jo.getString("proprietar");
   String nr_telefon=jo.getString("nr_telefon");
   names.add(nr_masina + "\n" + proprietar + "\n" + nr_telefon);

2 个答案:

答案 0 :(得分:2)

目前,ItemClick方法会为Toasts中的每个项目显示JSONArray

尝试向方法添加参数int position并使用它传递位置:

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            ItemClick(position);
        }

请注意for循环消失了。它用于为Toast中的每个项目显示JSONArray ja。现在,对于具有position索引的项目

,仅调用一次逻辑
    private int ItemClick(int position){
        try {
            JSONArray ja = new JSONArray(data);

            jo = ja.getJSONObject(position);
            String nr_telefon = jo.getString("nr_telefon");        
            Toast.makeText(MainActivity.this,nr_telefon,Toast.LENGTH_SHORT).show();
        }

            return 1;
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return 0;
    }

答案 1 :(得分:1)

因为您没有在列表视图中点击的项目上传递位置。使用此代码

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            ItemClick(position);
        }
    });

这个改变方法

private int ItemClick (int pos){
try {
    JSONArray ja=new JSONArray(data);
    JSONObject jo=null;


        jo=ja.getJSONObject(pos);
        String nr_telefon=jo.getString("nr_telefon");

        Toast.makeText(MainActivity.this,nr_telefon,Toast.LENGTH_SHORT).show();



    return 1;
} catch (JSONException e) {
    e.printStackTrace();
}

return 0;

}