Android 在未获得位置的情况下自动完成

Android 在未获得位置的情况下自动完成,android,autocompletetextview,Android,Autocompletetextview,当我单击该项时,填充自动完成下拉列表的ArrayAdapter在横向中大于5的位置返回“-1”。当我的应用程序以纵向模式运行时,当我单击并删除项目时,会返回正确的索引。下面是两个屏幕截图,显示适配器如何在每个方向填充数据: 编辑:有没有办法强制使用我的下拉列表而不是手机的横向 不确定是什么原因导致了这种情况?一种解决办法,并不理想,因为如果一款小屏幕手机与三星Galaxy S III(在阵列的第6位返回一个-1的索引)一样,那么崩溃仍然会发生,我在下面的代码中有 if (!((getReso

当我单击该项时,填充自动完成下拉列表的ArrayAdapter在横向中大于5的位置返回“-1”。当我的应用程序以纵向模式运行时,当我单击并删除项目时,会返回正确的索引。下面是两个屏幕截图,显示适配器如何在每个方向填充数据:

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


不确定是什么原因导致了这种情况?

一种解决办法,并不理想,因为如果一款小屏幕手机与三星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上注意到了这个错误)。我在我的
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;
        }
@覆盖
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults FilterResults=新的FilterResults();
ArrayList查询结果;
if(constraint!=null&&constraint.length()>0)queryResults=getPredictions(constraint);
else queryResults=new ArrayList();//空列表/无建议
//这是重要的东西
int-orientation=context.getResources().getConfiguration().orientation;
if((queryResults!=null)和&(queryResults.size()>4)和&(orientation==Configuration.orientation\u){
//如果用户在景观和谷歌提供的四个以上的地方的建议
PlaceAutocomplete item1=queryResults.get(0);
PlaceAutocomplete item2=queryResults.get(1);
PlaceAutocomplete item3=queryResults.get(2);
PlaceAutocomplete item4=queryResults.get(3);
//清空建议列表
queryResults.clear();
//只添加前四个建议
查询结果添加(第1项);
添加查询结果(第2项);
添加查询结果(第3项);
添加查询结果(第4项);
}
filterResults.values=queryResults;
if(queryResults!=null)filterResults.count=queryResults.size();
返回过滤器结果;
}
然后,为了安全起见,我在周围添加了一个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)
        }
    }
};
private final AdapterView.OnItemClickListener mAutocompleteClickListener=new AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
试一试{
最终PlaceArrayAdapter.PlaceAutocomplete项=PlaceArrayAdapter.getItem(位置);
最终字符串placeId=String.valueOf(item!=null?item.placeId:null);
最终字符串placeDesc=String.valueOf(item!=null?item.description:null);
Pendingreult placeResult=Places.GeoDataApi.getPlaceById(GoogleAppClient,placeId);
placeResult.setResultCallback(mUpdatePlaceDetailsCallback);
}捕获(异常|错误异常){
//处理异常(bug)
}
}
};

我测试了try/catch和adaper变化。两种方法都有效。

看到完全相同的问题,Galaxy S5