【问题标题】:AutoCompleteTextView doesn't update arrayadapter itemsAutoCompleteTextView 不更新 arrayadapter 项
【发布时间】:2015-08-30 14:04:23
【问题描述】:

以下应用流程显示了我的预期(自动完成列表中的“Alfa”):

打开应用程序->点击按钮->点击自动完成字段->输入“al”

但是这个失败(如果我输入“br”,“Bravo”仍在列表中):

打开应用程序->点击自动完成字段->输入任何内容然后将其删除->单击按钮->点击自动完成字段->输入“al”

为什么列表没有在第二个序列中更新?

public class DisplayFragment extends Fragment {

 AutoCompleteTextView autoCTVShop;
 Button buttonSend;

 String[] names= {"Bravo","Charlie","Delta","Foxtrot"};
 ArrayAdapter<String> adapter;

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {            
    return inflater.inflate(R.layout.fragment_display, container, false);
 }

 @Override
 public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    autoCTVShop = (AutoCompleteTextView) getActivity().findViewById(R.id.autoCompleteTextViewShop);
    adapter = new ArrayAdapter<String>(getActivity().getApplicationContext(),
            android.R.layout.simple_list_item_1, names);
    autoCTVShop.setAdapter(adapter);
    buttonSend = (Button) getActivity().findViewById(R.id.buttonSend);
    buttonSend.setOnClickListener(new View.OnClickListener() {  

        @Override
        public void onClick(View v) {
            //The following two lines don't work as I expected
            names[0]="Alfa";
            adapter.notifyDataSetChanged();
        }
    }); 
 }


 @Override
 public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
 }
}  

fragment_display.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >

<AutoCompleteTextView
    android:id="@+id/autoCompleteTextViewShop"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:imeOptions="actionNext"
    android:singleLine="true" />

<Button
    android:id="@+id/buttonSend"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:enabled="true"
    android:text="Button" />

</LinearLayout>  

谢谢。

【问题讨论】:

    标签: android android-arrayadapter autocompletetextview


    【解决方案1】:

    ArrayAdapter 在内部使用 2 个列表来存储和处理项目。最初,您传入的项目通过名为mObjects 的列表进行存储和处理。对外部 names 对象的任何更改也会反映在 mObjects 列表中。

    一旦您开始过滤,就会创建名为mOriginalValues 的第二个列表。在过滤流程中,mObjects 将用作“当前值”容器,而mOriginalValues 用作“重置并重新过滤”容器。更改 names 值将不再有影响。您可以直接更改适配器值(adapter.insert(...)、adapter.remove(...) - 它将修改 mOriginalValues)或重新创建适配器

    【讨论】:

      【解决方案2】:

      我很确定它区分大小写。试试艾尔……可能就是这样。也可能是因为您要替换名称。我不确定,但是当您传递名称时,它可能会将其设置为不会同时更新的实例变量。所以你需要重新通过数组。

      【讨论】:

      • 谢谢,但正如我所说,第一个步骤序列显示了正确的名称 (Alfa)。问题是为什么第二个步骤顺序不一样。
      猜你喜欢
      • 1970-01-01
      • 2013-02-28
      • 2011-06-08
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 2012-04-20
      • 1970-01-01
      相关资源
      最近更新 更多