景观中的自动完成无法获得位置

时间:2013-01-07 18:33:30

标签: android autocompletetextview

当我单击该项目时,填充AutoComplete下拉列表的ArrayAdapter在横向上为大于5的位置返回“-1”。当我的应用程序以纵向运行时,我在单击和项目时返回正确的索引。下面是2个屏幕截图,显示了适配器如何填充每个方向的数据:

编辑:有没有办法强制使用我的下拉列表而不是手机的景观?

Landscape Autocomplete

Portrait Autocomplete

不确定这可能是罪魁祸首?

2 个答案:

答案 0 :(得分:0)

一种解决方法,并不理想,因为如果小屏幕手机与三星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不起作用,但我猜测它是在操作系统级别。

答案 1 :(得分:0)

这是一个非常老的问题,但我遇到了同样的问题(我在三星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;
        }

然后为了安全起见,我在

周围添加了try / catch
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更改。两者都可以。