Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AutoCompleteTextView在华为设备中不工作_Android_Android Fragments_Autocomplete - Fatal编程技术网

Android AutoCompleteTextView在华为设备中不工作

Android AutoCompleteTextView在华为设备中不工作,android,android-fragments,autocomplete,Android,Android Fragments,Autocomplete,我有一个应用程序,它使用AutoCompleteTextView显示机场建议。我的应用程序支持两种语言-英语和阿拉伯语。我已经在对话框视图中实现了这个自动完成文本视图。我使用的代码如下: final AutoCompleteTextView fromactv = (AutoCompleteTextView) fromDialog.findViewById(R.id.autoCompleteTextView1d); final TextView no_match_tv

我有一个应用程序,它使用
AutoCompleteTextView
显示机场建议。我的应用程序支持两种语言-英语和阿拉伯语。我已经在
对话框视图
中实现了这个
自动完成文本视图
。我使用的代码如下:

final AutoCompleteTextView fromactv  = (AutoCompleteTextView) fromDialog.findViewById(R.id.autoCompleteTextView1d);
            final TextView no_match_tv  = (TextView) fromDialog.findViewById(R.id.tv_no_match);
            final ImageButton close     = (ImageButton) fromDialog.findViewById(R.id.ib_close);
            fromactv.setText(null);
            final InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
            OnItemClickListener onitem=new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    // TODO Auto-generated method stub
                    imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
                    String actvstringfrom = fromactv.getText().toString();

                    String resource[];
                    if(CommonFunctions.lang.equalsIgnoreCase("ar")){
                        resource     = actvstringfrom.split(" \t ");
                        actvstringfrom = resource[0];
                    }

                    strFromCity = actvstringfrom;
                    resource = actvstringfrom.split("-");
                    strFromCode = resource[3];
                    strFromCode = strFromCode.replace(" ", "");

                    tvFromCode.setText(strFromCode);
                    tvFromCity.setText(strFromCity);

                   if(resource[1].toLowerCase().contains("all airport") ||
                            resource[1].toLowerCase().contains("جميع المطار"))
                            allAirportFrom = "Y";
                        else
                            allAirportFrom = "N";

                    Editor editor = sharedpreferences.edit();
                    editor.putString("strFromCode", strFromCode);
                    editor.putString("allAirportFrom", allAirportFrom);
                    editor.commit();

                    fromDialog.dismiss();

                }
            };
            fromactv.addTextChangedListener(new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence s, int start, int before,
                        int count) {

                    String filter = s.toString().toLowerCase();
                    listItems = new ArrayList<String>();
                    for (String listItem : arrayAirportList) {
                        if (listItem.toLowerCase().contains(filter))
                        {
                            listItems.add(listItem);
                        }

                    }
                    if (listItems.size() == 0)
                    {
                        if(no_match_tv.getVisibility() == View.GONE)
                            no_match_tv.setVisibility(View.VISIBLE);
                    }
                    else
                    {
                        if(no_match_tv.getVisibility() == View.VISIBLE)
                            no_match_tv.setVisibility(View.GONE);
                    }
                    ArrayAdapter<String> adapt = new ArrayAdapter<String>(getActivity(),
                            R.layout.tv_autocomplete, listItems);
                    fromactv.setAdapter(adapt);
                }

                @Override
                public void beforeTextChanged(CharSequence s, int start, int count,
                        int after) {
                }

                @Override
                public void afterTextChanged(Editable s) {

                }
            });

            fromactv.setOnItemClickListener(onitem);
            fromDialog.show();
ACTV的最终自动完成文本视图=(自动完成文本视图)fromDialog.findViewById(R.id.autoCompleteTextView1d);
final TextView no_match_tv=(TextView)fromDialog.findViewById(R.id.tv no_match);
final ImageButton close=(ImageButton)fromDialog.findViewById(R.id.ib_close);
fromactv.setText(空);
最终InputMethodManager imm=(InputMethodManager)getActivity().getSystemService(Context.INPUT\u方法\u服务);
imm.toggleSoftInput(InputMethodManager.SHOW\u强制,0);
OnItemClickListener onitem=新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//TODO自动生成的方法存根
imm.toggleSoftInput(仅InputMethodManager.HIDE\u隐式\u,0);
字符串actvstringfrom=fromactv.getText().toString();
字符串资源[];
if(CommonFunctions.lang.equalsIgnoreCase(“ar”)){
resource=actvstringfrom.split(“\t”);
actvstringfrom=资源[0];
}
strFromCity=actvstringfrom;
resource=actvstringfrom.split(“-”);
strFromCode=资源[3];
strFromCode=strFromCode.replace(“,”);
tvFromCode.setText(strFromCode);
tvFromCity.setText(strFromCity);
如果(资源[1].toLowerCase()包含(“所有机场”)||
资源[1].toLowerCase().contains(包含)
allAirportFrom=“Y”;
其他的
allAirportFrom=“N”;
Editor=SharedReferences.edit();
putString(“strFromCode”,strFromCode);
编辑器.putString(“allAirportFrom”,allAirportFrom);
commit();
fromDialog.disclose();
}
};
fromactv.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列,int start,int before,
整数计数){
字符串筛选器=s.toString().toLowerCase();
listItems=new ArrayList();
for(字符串列表项:arrayAirportList){
if(listItem.toLowerCase().contains(筛选器))
{
添加(listItem);
}
}
if(listItems.size()==0)
{
if(不匹配\u tv.getVisibility()==View.GONE)
无匹配电视设置可见性(View.VISIBLE);
}
其他的
{
if(不匹配\u tv.getVisibility()==View.VISIBLE)
无匹配电视设置可见性(视图已消失);
}
ArrayAdapter adapt=新的ArrayAdapter(getActivity(),
R.layout.tv_自动完成,列表项);
来自ACTV.setAdapter(自适应);
}
@凌驾
更改前的公共无效(字符序列、整数开始、整数计数、,
整数后){
}
@凌驾
公共无效后文本已更改(可编辑){
}
});
来自Actv.setOnItemClickListener(onitem);
fromDialog.show();
除了荣誉设备外,此代码对大多数手机都适用。这一问题只有阿拉伯文版本。有人经历过这样的问题吗?我该怎么办


提前谢谢

终于弄清了真相: 由于某些模糊的原因,华为设备在设置为“填充父项”或“匹配父项”时,以及在将设备设置为RTL语言(如希伯来语或阿拉伯语)时,无法将自动完成弹出窗口宽度设置为父项的宽度。 我找到了一个解决办法(没有这么漂亮,但这是我得到的最好的):

AutoCompleteTextView字段=(AutoCompleteTextView)findViewById();
字符串制造商=Build.manufacturer;
if(制造商等于(“华为”)){
视图父项=(视图)字段。getParent();
int width=parent.getWidth();
字段。设置下拉宽度(宽度);
}
这段代码似乎在RTL和非RTL语言上都能正常工作。
B.T.W:你可以跳过IF,它仍然适用于所有其他设备。我添加它是为了强调它是针对特定设备的解决方法。

这里也一样。。。使用P9设备和希伯来语感谢您的回复。我试试这个。
AutoCompleteTextView field = (AutoCompleteTextView)findViewById(<YOUR_ID>);
String manufacturer = Build.MANUFACTURER;
if(manufacturer.equals("HUAWEI")){
    View parent = (View)field.getParent();
    int width = parent.getWidth();
    field.setDropDownWidth(width);
}