当我单击该项目时,填充 AutoComplete 下拉列表的 ArrayAdapter 对于横向位置大于 5 的位置返回“-1”。当我的应用程序纵向运行时,单击和项目时会返回正确的索引。下面是 2 个屏幕截图,展示了适配器如何在每个方向上填充数据:
编辑:有没有办法强制使用我的下拉列表而不是手机的横向?
不知道这可能是什么罪魁祸首?
当我单击该项目时,填充 AutoComplete 下拉列表的 ArrayAdapter 对于横向位置大于 5 的位置返回“-1”。当我的应用程序纵向运行时,单击和项目时会返回正确的索引。下面是 2 个屏幕截图,展示了适配器如何在每个方向上填充数据:
编辑:有没有办法强制使用我的下拉列表而不是手机的横向?
不知道这可能是什么罪魁祸首?
一种解决方法,并不理想,因为如果小屏幕手机与三星 Galaxy S III 一样(返回数组第 6 位之外的 -1 索引),那么崩溃仍然会发生,我在下面的代码中有.
if (!((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL)) {
mQuery.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
} else {
mQuery.setImeOptions(EditorInfo.IME_ACTION_SEARCH);
}
HTC Wildfire 具有与三星相同的下拉菜单,但返回的位置超过了索引 5。
我将继续调查为什么 S III 不工作,但我猜测它是在操作系统级别。
这是一个非常古老的问题,但我遇到了同样的问题(我在三星 Galaxy S5 上注意到了这个错误)。performFiltering
我在我的方法中添加了以下代码ArrayAdapter
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
ArrayList<PlaceAutocomplete> queryResults;
if (constraint != null && constraint.length() > 0) queryResults = getPredictions(constraint);
else queryResults = new ArrayList<>(); // empty list/no suggestions
//HERE'S THE IMPORTANT STUFF
int orientation = context.getResources().getConfiguration().orientation;
if ((queryResults !=null) && (queryResults.size() >4) && (orientation ==Configuration.ORIENTATION_LANDSCAPE)) {
// if user in landscape and more than four suggestions offered by Google Places
PlaceAutocomplete item1 = queryResults.get(0);
PlaceAutocomplete item2 = queryResults.get(1);
PlaceAutocomplete item3 = queryResults.get(2);
PlaceAutocomplete item4 = queryResults.get(3);
// empty the suggestion list
queryResults.clear();
// add the only first four suggestion
queryResults.add(item1);
queryResults.add(item2);
queryResults.add(item3);
queryResults.add(item4);
}
filterResults.values = queryResults;
if (queryResults !=null) filterResults.count = queryResults.size();
return filterResults;
}
然后为了安全起见,我在
private final AdapterView.OnItemClickListener mAutocompleteClickListener =new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
try {
final PlaceArrayAdapter.PlaceAutocomplete item = placeArrayAdapter.getItem(position);
final String placeId = String.valueOf(item != null ? item.placeId : null);
final String placeDesc = String.valueOf(item != null ? item.description : null);
PendingResult<PlaceBuffer> placeResult = Places.GeoDataApi.getPlaceById(googleApiClient, placeId);
placeResult.setResultCallback(mUpdatePlaceDetailsCallback);
} catch (Exception | Error exception) {
//handle the exception (bug)
}
}
};
我测试了 try/catch 和 adaper 更改。两者都有效。