我遇到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);
答案 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;
}