Android 如何获取AutoCompleteTextView适配器的正确ID
我是Android开发新手,遇到了一个我觉得很难解决的问题。我正在试图弄清楚如何正确使用Android 如何获取AutoCompleteTextView适配器的正确ID,android,autocompletetextview,android-adapter,Android,Autocompletetextview,Android Adapter,我是Android开发新手,遇到了一个我觉得很难解决的问题。我正在试图弄清楚如何正确使用AutoCompleteTextView小部件。我想使用web服务中的XML数据创建一个自动完成文本视图。我设法让它工作,但我对输出感到不满意 我想将id=>名称对的HashMap放入AutoCompleteTextView中,并获取单击项的id。当我点击自动完成过滤集输出时,我想在自动完成框下面填充一个列表,我也设法开始工作 迄今为止已完成: autocomplete适用于简单的ArrayList,所有数
AutoCompleteTextView
小部件。我想使用web服务中的XML数据创建一个自动完成文本视图
。我设法让它工作,但我对输出感到不满意
我想将id=>名称对的HashMap
放入AutoCompleteTextView中,并获取单击项的id。当我点击自动完成过滤集输出时,我想在自动完成框下面填充一个列表,我也设法开始工作
迄今为止已完成:
- autocomplete适用于简单的
,所有数据都经过过滤 正确的ArrayList
事件在单击后正确激发onItemClick
返回正确的parent.getItemAtPosition(位置)
单击项的表示形式String
onItemClick(AdapterView父对象、视图v、int位置、长id)
的行为与我所希望的不同。如何计算单击项的未筛选数组位置?过滤后的位置是我不感兴趣的位置
其他问题:
- 如何在
AutoCompleteTextView
- 如何在
事件中获取正确的onItemClick
itemId
onItemClick()
中,您可以获得适配器所基于的当前列表的位置。然后,您可以使用getItem()
来获取该位置的数据项(同样,初始或筛选都没有关系)
这将适用于列表和映射
(假设您使用simpledapter
)。对于贴图
,您始终可以选择添加一个附加键来设置初始列表中未过滤的位置
如果您将自己的适配器与AutoCompleteTextView
一起使用,则可以使onItemClick()
为您提供正确的id
(但位置无法更改)
public类SpecialAutoComplete扩展了AutoCompleteTextView{
公共SpecialUtoComplete(上下文){
超级(上下文);
}
@凌驾
已完成的公共无效过滤器(整数计数){
//当适配器完成筛选时,将调用此函数
//操作,并通知AutoCompleteTextView
long[]realIds=new long[count];//这将保存地图中的真实ID
for(int i=0;i
和适配器:
public class SimpleAdapterExtension extends SimpleAdapter {
private List<? extends Map<String, String>> mData;
private long[] mCurrentIds;
public SimpleAdapterExtension(Context context,
List<? extends Map<String, String>> data, int resource,
String[] from, int[] to) {
super(context, data, resource, from, to);
mData = data;
}
@Override
public long getItemId(int position) {
// this will be used to get the id provided to the onItemClick callback
return mCurrentIds[position];
}
@Override
public boolean hasStableIds() {
return true;
}
public void setRealIds(long[] realIds) {
mCurrentIds = realIds;
}
}
公共类SimpleAdapterExtension扩展SimpleAdapter{
私有列表使用Luksprog方法,我用ArrayAdapter做了一些类似的操作
public class SimpleAutoCompleteAdapter extends ArrayAdapter<String>{
private String[] mData;
private int[] mCurrentIds;
public SimpleAutoCompleteAdapter(Context context, int textViewResourceId,
String[] objects) {
super(context, textViewResourceId, objects);
mData=objects;
}
@Override
public long getItemId(int position) {
String data = getItem(position);
int index = Arrays.asList(mData).indexOf(data);
/*
* Atention , if your list has more that one same String , you have to improve here
*/
// this will be used to get the id provided to the onItemClick callback
if (index>0)
return (long)mCurrentIds[index];
else return 0;
}
@Override
public boolean hasStableIds() {
return true;
}
public void setRealIds(int[] realIds) {
mCurrentIds = realIds;
}
}
公共类SimpleAtoCompleteAdapter扩展了ArrayAdapter{
私有字符串[]mData;
私有int[]mCurrentIds;
公共SimpleAutoCompleteAdapter(上下文上下文,int textViewResourceId,
字符串[]对象){
超级(上下文、textViewResourceId、对象);
mData=对象;
}
@凌驾
公共长getItemId(int位置){
字符串数据=getItem(位置);
int index=Arrays.asList(mData).indexOf(data);
/*
*注意,如果列表中有多个相同的字符串,则必须在此处进行改进
*/
//这将用于获取提供给onItemClick回调的id
如果(索引>0)
返回(长)mCurrentIds[索引];
否则返回0;
}
@凌驾
公共布尔表ID(){
返回true;
}
公共void setRealIds(int[]realIds){
mCurrentIds=realIds;
}
}
为AutoCompleteTextView实现onItemClickListener,然后在列表中使用indexOf查找所选项目的索引
actvCity.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
int index = cityNames.indexOf(actvCity.getText().toString());
// Do Whatever you want to do ;)
}
});
actvCity.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
int index=cityNames.indexOf(actvCity.getText().toString());
//做你想做的事;)
}
});
首先将数据添加到自定义arraylist中
// mList used for adding custom data into your model
private List<OutletListSRModel> mList = new ArrayList<>();
// listdata used for adding string data for auto completing.
ArrayList<String> listdata = new ArrayList<String>();
for (int i = 0; i < JArray.length(); i++) {
JSONObject responseJson = JArray.getJSONObject(i);
OutletListSRModel mModel = new OutletListSRModel();
mModel.setId(responseJson.getString("id"));
mModel.name(responseJson.getString("outlet_name"));
listdata.add(responseJson.getString("outlet_name"));
}
ArrayAdapter adapter = new
ArrayAdapter(getActivity(),
android.R.layout.simple_list_item_1, listdata);
searchOutletKey.setAdapter(adapter);
//用于将自定义数据添加到模型中的mList
private List mList=new ArrayList();
//listdata用于添加自动完成的字符串数据。
ArrayList listdata=新的ArrayList();
for(int i=0;iactvCity.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
int index = cityNames.indexOf(actvCity.getText().toString());
// Do Whatever you want to do ;)
}
});
// mList used for adding custom data into your model
private List<OutletListSRModel> mList = new ArrayList<>();
// listdata used for adding string data for auto completing.
ArrayList<String> listdata = new ArrayList<String>();
for (int i = 0; i < JArray.length(); i++) {
JSONObject responseJson = JArray.getJSONObject(i);
OutletListSRModel mModel = new OutletListSRModel();
mModel.setId(responseJson.getString("id"));
mModel.name(responseJson.getString("outlet_name"));
listdata.add(responseJson.getString("outlet_name"));
}
ArrayAdapter adapter = new
ArrayAdapter(getActivity(),
android.R.layout.simple_list_item_1, listdata);
searchOutletKey.setAdapter(adapter);
searchOutletKey.setOnItemClickListener ( new AdapterView.OnItemClickListener ( ) {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String txtOutletId = mOutletListSRModel.get(position).getId();
}
});