我有一个由JSONObjects夸大的ListView。它适用于list.setOnItemClickListener
。
我使用EditText添加了搜索工具,并在运行时搜索JSONArray中的Items(包含JSONObjects)。
但是在搜索之后,当我点击ListView项时,它会向我显示JSONArray中的原始位置。
例如,如果我有这些项目的ListView。
Africa
Asia
Europe
North America
South America
[ListView中的项目位置为0 - 4,即非洲= 0,南美洲= 4]
现在,如果我使用EditText字段作为搜索栏,并在其中键入America
,它现在将显示包含2个项目的列表视图。
North America
South America
现在ListView在运行时有两个项目,如果我点击North America
它会显示JSONArray的位置[0],原来是Africa
,所以,而不是向我展示信息/关于North America
的数据显示我点击了Africa
如何从ListView Click中获取JSONObject Click but position-id?
/ *填充ListView onCreate()* /
public void populateCityList() {
List<CityRowItem> rowItems;
rowItems = new ArrayList<CityRowItem>();
try {
jArray = readJSONFile();
if (jArray != null) {
for (int i = 0; i < jArray.length(); i++) {
JSONObject j1 = jArray.getJSONObject(i);
CityRowItem item = new CityRowItem(R.drawable.grain,
j1.getString("city_name_eng"),
j1.getString("city_name_alias"), R.drawable.city);
rowItems.add(item);
}
CityListAdapter myadapter = new CityListAdapter(
GetCityManual.this, R.layout.list_item_city, rowItems);
list.setAdapter(null);
list.setAdapter(myadapter);
}
}
catch (JSONException) {
;
}
}
/ *这是onClick Listener * /
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
try {
JSONObject j1 = jArray.getJSONObject(position);
String CityName = jsonObj.getString("city_name_eng")
.toString();
Intent myIntent = new Intent(GetCityManual.this,
GetCategory.class);
myIntent.putExtra("objCity", CityName);
}
catch (JSONException e)
{
;
}
}
}
/ *这段代码反映了使用EditText * /
搜索的功能txtSearch.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void afterTextChanged(Editable s) {
List<CityRowItem> rowItems;
rowItems = new ArrayList<CityRowItem>();
if (jArray != null) {
try {
for (int i = 0; i < jArray.length(); i++) {
JSONObject j1 = jArray.getJSONObject(i);
if (j1.getString("city_name_eng").toLowerCase()
.contains(s.toString().toLowerCase())) {
CityRowItem item = new CityRowItem(
R.drawable.grain, j1
.getString("city_name_eng"), j1
.getString("city_name_alias"),R.drawable.city);
rowItems.add(item);
}
CityListAdapter myadapter = new CityListAdapter(
GetCityManual.this,
R.layout.list_item_city, rowItems);
list.setAdapter(null);
list.setAdapter(myadapter);
}
}
} catch (Exception _e) {
;
}
}
}
答案 0 :(得分:0)
LIst从实际列表适配器中提供您选择的位置,您更改了 列表适配器,所以你从那里得到数字。你应该保留原来的位置 其他
答案 1 :(得分:0)
您的onItemClick会显示您单击的列表的当前位置。
您可以在班级中使用List<CityRowItem> CurrentRowItems;
,并在init和onTextChanged上保留对该列表this.CurrentRowItems = rowItems;
的引用。
当点击事件发生时CityRowItem city = this.CurrentRowItems.get(position);
。
另外,我建议只解码json文件一次,然后再处理列表。