2016-11-01 39 views
2

當列表中添加任何項時(列有編輯文本和添加按鈕的幫助),我有一個動態增長的列表。我也有刪除按鈕完美的時候我添加和刪除。但在其他部分,我添加了編輯文本與文本觀察者,當我搜索的東西它排序列表和並行如果我從列表中刪除任何項目,它從列表中刪除項目,但不刷新適配器,即使我也調用notifyDataSetChanged()。 這是代碼。使用動態列表和文本觀察器時,通知數據集更改不起作用

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mArrayList = new ArrayList(); 
    mEtSearch = (EditText) findViewById(R.id.et_search); 
    mEtText = (EditText) findViewById(R.id.et_item_to_add); 
    mBtnAdd = (Button) findViewById(R.id.btn_add); 
    mBtnDelete = (Button) findViewById(R.id.btn_delete); 
    mLvItems = (ListView) findViewById(R.id.lv_itmes); 
    mBtnAdd.setOnClickListener(this); 
    mBtnDelete.setOnClickListener(this); 
    mAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, mArrayList); 
    mLvItems.setAdapter(mAdapter); 
    mEtSearch.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) { 
      String text = mEtSearch.getText().toString().toLowerCase(Locale.getDefault()); 
      mAdapter.getFilter().filter(text); 

     } 
    }); 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.btn_add: 
      if (mEtText.getText().toString().isEmpty()) { 
       Toast.makeText(this, "add something to list ", Toast.LENGTH_LONG).show(); 
      } else { 
       mArrayList.add(mEtText.getText().toString()); 
       mAdapter.notifyDataSetChanged(); 
       mEtText.setText(""); 
      } 
      break; 
     case R.id.btn_delete: 
      SparseBooleanArray checkedItemPositions = mLvItems.getCheckedItemPositions(); 
      int itemCount = mLvItems.getCount(); 

      for (int i = itemCount - 1; i >= 0; i--) { 
       if (checkedItemPositions.get(i)) { 
        mArrayList.remove(i);//This also I tried 
        // mAdapter.remove(mArrayList.get(i));//This also I tried 
       } 
      } 
      checkedItemPositions.clear(); 
      mAdapter.notifyDataSetChanged(); 
      break; 

    } 

} 
+0

如果我在文本觀察者編輯文本中添加一些文本並嘗試在列表中添加一些文本,我可以將該文本添加到列表中但無法在UI中看到它。我嘗試從列表中刪除一些東西,我可以從列表中刪除項目,但無法在UI中看到。 –

回答

0

嘗試在您完成當前列表中的更改後重新加載列表。

相關問題