sar*_*ath 5 android autocompletetextview android-adapter
我是Android开发新手,遇到了一个我很难解决的问题.我试图弄清楚如何AutoCompleteTextView正确使用小部件.我想AutoCompleteTextView使用来自Web服务的XML数据创建一个.我设法让它工作,但我对输出肯定不满意.
我想将一个HashMap带有id => name对的内容添加到AutoCompleteTextView中,并获取所单击项的id.当我点击自动完成过滤集输出时,我想填充自动完成框下面的列表,我也设法开始工作.
到目前为止:
ArrayList,所有数据过滤正确onItemClick 单击后事件正常触发parent.getItemAtPosition(position)返回String
所单击项的正确表示事件onItemClick(AdapterView parent, View v, int position, long id)并不像我想的那样.如何确定所点击项目的未过滤数组位置?过滤后的位置是我不感兴趣的位置.
进一步的问题:
HashMaps或Collections在AutoCompleteTextViewitemId在onItemClick活动中获得正确的权利我对这个问题进行了非常广泛的研究,但没有找到任何有价值的信息来回答我的问题.
Luk*_*rog 13
事件onItemClick(AdapterView父,View v,int position,long id)不按我的意愿行事.
过滤适配器时这是正常情况.尽管适配器从其视点保留对初始未过滤数据的引用,但它具有基于的单组数据(无论是初始数据还是由过滤操作产生的).但这不应该引起任何问题.使用默认的sdk适配器(或子类),onItemClick()可以获得适配器所基于position的当前列表.然后,您可以使用getItem()它获取数据项position(再次,无论是初始还是过滤都无关紧要).
String data = getItem(position);
int realPosition = list.indexOf(data); // if you want to know the unfiltered position
Run Code Online (Sandbox Code Playgroud)
这将适用于列表和Maps(假设您使用SimpleAdapter).对于a,Maps您始终可以选择添加其他键以在初始列表中设置未过滤的位置.
如果你使用自己的适配器,AutoCompleteTextView你可以让onItemClick()你给你正确的id(位置,但你不能改变).
public class SpecialAutoComplete extends AutoCompleteTextView {
public SpecialAutoComplete(Context context) {
super(context);
}
@Override
public void onFilterComplete(int count) {
// this will be called when the adapter finished the filter
// operation and it notifies the AutoCompleteTextView
long[] realIds = new long[count]; // this will hold the real ids from our maps
for (int i = 0; i < count; i++) {
final HashMap<String, String> item = (HashMap<String, String>) getAdapter()
.getItem(i);
realIds[i] = Long.valueOf(item.get("id")); // get the ids from the filtered items
}
// update the adapter with the real ids so it has the proper data
((SimpleAdapterExtension) getAdapter()).setRealIds(realIds);
super.onFilterComplete(count);
}
}
Run Code Online (Sandbox Code Playgroud)
和适配器:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您还Filter为适配器实现了类,那么您可以从那里获取ID而无需覆盖AutoCompleTextView该类.
| 归档时间: |
|
| 查看次数: |
6342 次 |
| 最近记录: |