2015-08-25 59 views
0

更新下面的程序流程显示了我的预期(“阿尔法”中的自动完成列表):AutoCompleteTextView不arrayadapter项目

打开应用程序 - >点击按钮 - >自动完成上自来水场 - >键入“人“

但是这一次失败(如果我输入‘BR’,‘布拉沃’仍然在名单):

打开应用程序 - 在自动完成场>水龙头 - >输入任何东西,然后将其删除 - >点击按钮 - >点击自动完成字段 - >输入“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> 

感谢。

回答

2

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

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

+0

谢谢,@ N.T。非常明确的解释。 – Javier

0

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

+0

感谢WIll但正如我所说的,第一个步骤序列显示正确的名称(阿尔法)。问题是为什么第二个步骤序列不显示相同。 – Javier

相关问题