Android 使用动态列表和文本监视程序时,通知已更改的数据集不起作用
当我向列表中添加任何项目时,我有一个动态增长的列表(借助编辑文本和添加按钮)。我有“删除”按钮,它在添加和删除时工作正常。但在另一部分中,我添加了“编辑文本”和“文本观察程序”,当我搜索某个内容时,它会对列表进行排序并并行。如果我从列表中删除任何项目,它会从列表中删除该项目,但不会刷新适配器,即使我正在调用notifyDataSetChanged()也。 这是代码Android 使用动态列表和文本监视程序时,通知已更改的数据集不起作用,android,Android,当我向列表中添加任何项目时,我有一个动态增长的列表(借助编辑文本和添加按钮)。我有“删除”按钮,它在添加和删除时工作正常。但在另一部分中,我添加了“编辑文本”和“文本观察程序”,当我搜索某个内容时,它会对列表进行排序并并行。如果我从列表中删除任何项目,它会从列表中删除该项目,但不会刷新适配器,即使我正在调用notifyDataSetChanged()也。 这是代码 @Override protected void onCreate(Bundle savedInstanceState) {
@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;
}
}
在当前列表中完成更改后,尝试重新加载列表。如果我在文本观察者编辑文本中放入一些文本,并尝试在列表中添加一些文本,我可以将该文本添加到列表中,但在UI中看不到它。我尝试从列表中删除一些内容,我可以从列表中删除项目,但在UI中看不到。