我有一個由ArrayAdapter<String>
實例支持的AutoCompleteTextView
實例。我注意到,當我使用remove(T)
方法從此適配器中刪除一個項目,然後使用for()
循環從此適配器使用getItem(int)
寫入所有項目時,它甚至會刪除項目,但是當我點擊AutoCompleteTextView
和ListView
的項目時顯示出來,我用for()
循環來寫所有項目,現在它輸出正確,沒有刪除項目。我不知道爲什麼它沒有要求remove(T)
後刪除的項目,但顯示ListView
後,即使我以後remove(T)
電話呼叫notifyDataSetChanged()
。謝謝你的回覆。ArrayAdapter <T>如何處理項目?
請看下面的例子: 當你輸入一個向的AutoCompleteTextView
你會看到4個項目,當你按下寫項目按鈕,您將看到所有4項記錄。當您按下刪除第三個項目按鈕,它就會從該適配器刪除此項目,然後它會調用notifyDataSetChanged()
之後,它會寫所有項目,並在那裏你會看到,也將被刪除的項目。但是,當你再次輸入一個到AutoCompleteTextView
,現在你會看到3個項目,當你按下寫項目現在會寫,除了刪除了一個只有3項。
activity_main.xml中
<LinearLayout
android:orientation="vertical">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<AutoCompleteTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/auto_et"
android:layout_weight="1"
android:completionThreshold="1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Write items"
android:id="@+id/button"
android:onClick="logItems" />
</LinearLayout>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Delete 3rd item"
android:onClick="deleteItem" />
</LinearLayout>
MainActivity.java
public class MainActivity extends Activity {
AutoCompleteTextView auto_et = null;
ArrayAdapter<String> adapter = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("ab");
list.add("abc");
list.add("abcd");
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, list);
auto_et = (AutoCompleteTextView)findViewById(R.id.auto_et);
auto_et.setAdapter(adapter);
}
public void logItems(View v) {
for(int i = 0; i < adapter.getCount(); ++i) {
Log.d(null, adapter.getItem(i));
}
}
public void deleteItem(View v) {
adapter.remove(adapter.getItem(2));
adapter.notifyDataSetChanged();
logItems(null);
}
}