2017-01-10 57 views
0

在我的Android應用程序中,我有與EditTexts的列表視圖。在更改EditText值後,我將ArrayList的新值存儲在afterTextChanged中。但是在編輯只有一個字段後出現錯誤,ArrayList獲得了幾個編輯字符串相同的項目。我如何才能讓ArrayList只爲每個字段編輯一次字符串?文本更改自定義適配器中的EditText的監聽器

class MyListViewAdapter extends ArrayAdapter<KeyValueList> 
{ 
private int layoutResource; 

MyListViewAdapter(Context context, int layoutResource, List<KeyValueList> keyValueList) 
{ 
    super(context, layoutResource, keyValueList); 
    this.layoutResource = layoutResource; 
} 

@Override 
public View getView(final int position, final View convertView, @NonNull ViewGroup parent) 
{ 
    View view = convertView; 
    if (view == null) 
    { 
     LayoutInflater layoutInflater = LayoutInflater.from(getContext()); 
     view = layoutInflater.inflate(layoutResource, null); 
    } 

    final KeyValueList keyValuelist = getItem(position); 

    if (keyValuelist != null) 
    { 
     TextView key = (TextView) view.findViewById(R.id.key); 
     EditText value = (EditText) view.findViewById(R.id.value); 
     ImageView image = (ImageView) view.findViewById(R.id.img); 

     value.addTextChangedListener(new TextWatcher() 
     { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) 
      { 

      } 

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

      } 

      @Override 
      public void afterTextChanged(Editable s) 
      { 
       HashMap<String, String> edit = new HashMap<>(); 

       edit.put("string", s.toString()); 

       openEntry.edit_list.add(edit); 
      } 
     }); 
.... 
} 
+0

您需要使用的藥水,在添加新的價值你那個藥水上的「名單」。 – Shailesh

回答

0

,如果您使用設置 TextChangedListener如果存在的話,或者從視圖中刪除所有TextChangedListeners你添加新的人之前,它可能會工作。

這些視圖會被回收,但您一直在爲它們添加新的聽衆。我認爲這可能是問題所在。

+0

沒有setTextChangedListener。但我如何刪除所有TextChangedListeners? – David

+0

如果您將新的TextWatcher()移動到一個變量(如果可能的話),所以您只需創建一次並重新使用它,就可以將它從視圖中移除並添加到視圖中,現在只需添加它。 – Frank

+0

感謝您的幫助。我確實喜歡你說,它開始工作更好,但仍然有問題。例如,如果我在我的'edittext'中有「hello」,並且正在給它添加「aaa」,'arraylist'正在獲取「helloa」,「helloaa」,「helloaaa」。也許你也可以幫助我呢? – David

0

我也面臨類似的問題,通過使EditText作爲final和檢查條件hasFocus()

final EditText value = (EditText) view.findViewById(R.id.value); 
... 
@Override 
public void afterTextChanged(Editable s) 
{ 

    if(value.hasFocus()){ 
     HashMap<String, String> edit = new HashMap<>(); 
     edit.put("string", s.toString()); 
     openEntry.edit_list.add(edit); 
    } 

} 

解決了這個可能有助於有人用同樣的問題

相關問題