2

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

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

横向自动完成

纵向自动完成

不知道这可能是什么罪魁祸首?

4

2 回答 2

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 不工作,但我猜测它是在操作系统级别。

于 2013-01-08T14:34:19.320 回答
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;
        }

然后为了安全起见,我在

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 更改。两者都有效。

于 2018-10-20T13:34:39.880 回答