在 AutoCompleteTextView 中应用于项目点击侦听器 returns 总是 id 为 1
In AutoCompleteTextView apply on item click listner returns always id as a 1
这是我的json回复:-
{
"ReplyCode": 1,
"Message": "Franchisee and Plans List",
"data2": [
{
"StateId": 1,
"StateName": "Andaman and Nicobar Island",
"CountryId": 1
},
{
"StateId": 2,
"StateName": "Andhra Pradesh",
"CountryId": 1
},
{
"StateId": 3,
"StateName": "Arunachal Pradesh",
"CountryId": 1
},
{
"StateId": 4,
"StateName": "Assam",
"CountryId": 1
},
这是我从 json 中获取数据的方法:-
public void volleyStatedata() {
if (mGeneralUtilities.isConnected()) {
mProgressDialog.show();
StringRequest stateRequest = new StringRequest(Request.Method.POST, GlobalData.REGISTER_DATA_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
mProgressDialog.dismiss();
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("data2");
for (int i = 0; i < jsonArray.length(); i++) {
PojoState pojoState = new PojoState();
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
String stateId = jsonObject1.getString("StateId");
String stateName = jsonObject1.getString("StateName");
mStateList.add(stateName);
mStateIdList.add(stateId);
pojoState.setmStateId(stateId);
pojoState.setmStatename(stateName);
mpojoStateList.add(pojoState);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e("error", "" + volleyError.getMessage());
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
return params;
}
};
RequestQueue stateQueue = Volley.newRequestQueue(getContext());
stateQueue.add(stateRequest);
} else {
mGeneralUtilities.showAlertDialog("Hey User !", "Please connect to the internet", "Ok");
}
}
这是我的适配器,我将其设置为自动完成文本视图:-
ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, mStateList);
mActState.setAdapter(mAdapter);
mActState.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
mpojoStateList.get(i).getmStateId();
}
});
我的问题是 autocompletetextview 总是 return id 1.i 我在 it.but 上应用 onitemclick 监听器,它正在获取 id 1 always.i 想要根据状态进行相应的 id显示了我的 json.Can 谁能告诉我如何才能做到这一点??
您的代码在 onItemClick
回调中使用了 return 的 i
,它指的是您从自动完成列表中的可见项目中点击的项目,而不是您的原始项目列表。当您单击自动完成列表中的第一项时,i=0
,这意味着它始终 return 是“Andaman and Nicobar Island”项,其 StateId=1
.
我想不到,您可以从 mAdapter
中获取项目字符串并将其与您的 mpojoStateList
进行比较并找到相应的项目。 (查看示例代码)
final ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, mStateList);
mActState.setAdapter(mAdapter);
mActState.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String itemName = mAdapter.getItem(i);
for (PojoState pojo : mpojoStateList) {
if (pojo.mStateName.equals(itemName)) {
String id = pojo.getmStateId(); // This is the correct ID
break; // No need to keep looping once you found it.
}
}
}
});
如果在您的 PojoState
对象中覆盖您的 toString()
方法并使其 return 成为 mStateName
,并传递 mpojoStateList
到适配器,而不必制作 3 ArrayLists
。这样,mAdapter.getItem(i)
将 return 一个 PojoState
对象而不是字符串,您可以使用它的 ID 而无需参考 returned 位置 (i
) .
这是我的json回复:-
{
"ReplyCode": 1,
"Message": "Franchisee and Plans List",
"data2": [
{
"StateId": 1,
"StateName": "Andaman and Nicobar Island",
"CountryId": 1
},
{
"StateId": 2,
"StateName": "Andhra Pradesh",
"CountryId": 1
},
{
"StateId": 3,
"StateName": "Arunachal Pradesh",
"CountryId": 1
},
{
"StateId": 4,
"StateName": "Assam",
"CountryId": 1
},
这是我从 json 中获取数据的方法:-
public void volleyStatedata() {
if (mGeneralUtilities.isConnected()) {
mProgressDialog.show();
StringRequest stateRequest = new StringRequest(Request.Method.POST, GlobalData.REGISTER_DATA_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
mProgressDialog.dismiss();
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("data2");
for (int i = 0; i < jsonArray.length(); i++) {
PojoState pojoState = new PojoState();
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
String stateId = jsonObject1.getString("StateId");
String stateName = jsonObject1.getString("StateName");
mStateList.add(stateName);
mStateIdList.add(stateId);
pojoState.setmStateId(stateId);
pojoState.setmStatename(stateName);
mpojoStateList.add(pojoState);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e("error", "" + volleyError.getMessage());
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
return params;
}
};
RequestQueue stateQueue = Volley.newRequestQueue(getContext());
stateQueue.add(stateRequest);
} else {
mGeneralUtilities.showAlertDialog("Hey User !", "Please connect to the internet", "Ok");
}
}
这是我的适配器,我将其设置为自动完成文本视图:-
ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, mStateList);
mActState.setAdapter(mAdapter);
mActState.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
mpojoStateList.get(i).getmStateId();
}
});
我的问题是 autocompletetextview 总是 return id 1.i 我在 it.but 上应用 onitemclick 监听器,它正在获取 id 1 always.i 想要根据状态进行相应的 id显示了我的 json.Can 谁能告诉我如何才能做到这一点??
您的代码在 onItemClick
回调中使用了 return 的 i
,它指的是您从自动完成列表中的可见项目中点击的项目,而不是您的原始项目列表。当您单击自动完成列表中的第一项时,i=0
,这意味着它始终 return 是“Andaman and Nicobar Island”项,其 StateId=1
.
我想不到,您可以从 mAdapter
中获取项目字符串并将其与您的 mpojoStateList
进行比较并找到相应的项目。 (查看示例代码)
final ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, mStateList);
mActState.setAdapter(mAdapter);
mActState.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String itemName = mAdapter.getItem(i);
for (PojoState pojo : mpojoStateList) {
if (pojo.mStateName.equals(itemName)) {
String id = pojo.getmStateId(); // This is the correct ID
break; // No need to keep looping once you found it.
}
}
}
});
如果在您的 PojoState
对象中覆盖您的 toString()
方法并使其 return 成为 mStateName
,并传递 mpojoStateList
到适配器,而不必制作 3 ArrayLists
。这样,mAdapter.getItem(i)
将 return 一个 PojoState
对象而不是字符串,您可以使用它的 ID 而无需参考 returned 位置 (i
) .