onClick编辑ListView上的CheckBox数据

onClick to edit CheckBox data on ListView

我使用 FileOutputStream 将一些文本保存到文件中,然后将它们显示在 ListView 上。

我正在尝试编辑内容,方法是首先选中项目的复选框,然后单击按钮编辑或删除数据。

我做了很多研究,但仍然不明白如何实现这个

这是我的代码

显示数据并在ListView

上显示
void ShowSavedFiles() {
    //SavedFiles = getApplicationContext().fileList();
    SavedFiles = getApplication().fileList();
    ArrayAdapter<String> adapter
            = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1,
            SavedFiles);

    listView.setAdapter(adapter);
    if (adapter.isEmpty()) {
        Toast.makeText(getBaseContext(), "There is no Address !", Toast.LENGTH_LONG).show();
    }
}

要通过选中 CheckBox 来编辑数据,然后按编辑按钮

void editData(){
    imgEditData.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (choiceMode == false) {

                choiceMode = true;
                clickAble = false;
                multiSelectBar.setVisibility(View.VISIBLE);
                Toast.makeText(addressActivity.this, "Edit ON", Toast.LENGTH_SHORT).show();
                listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        // change the checkbox state
                        CheckedTextView checkedTextView = ((CheckedTextView) view);
                        checkedTextView.setChecked(!checkedTextView.isChecked());
                    }
                });
                ArrayAdapter<String> adapter
                        = new ArrayAdapter<String>(addressActivity.this,
                        android.R.layout.simple_list_item_multiple_choice,
                        SavedFiles);
                listView.setAdapter(adapter);
            }}
    });
}

一张图更好的理解

忽略其他按钮

创建一个 public class utils 并在其中创建一个 public static ArrayList<Integer> positions。在 listviewadapter 中,在 CheckBox 上添加 setOnClickListener,当它被点击并选中时,您将该位置添加到 public static array

public class Utils {
    public static ArrayList<Integer> positions =new ArrayList<>();
}

getView() 展开布局后适配器的功能中添加此

CheckBox cBox= (CheckBox) view.findViewById(R.id.myCheckBox); // view is you view inflated
final int myPos= position; //position of cuurent item will be passed into getwiew function

        cBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CheckBox temp=(CheckBox)v;
                if(temp.isChecked()){
                    Utils.positions.add(myPos);
                }
                else{
                    Utils.positions.remove(myPos);
                }
            }
        });

通过这种方式,您可以获得 Utils.postions 中的所有索引列表,当您按下编辑删除等按钮时,这些索引将被选中。单击这些按钮,您可以在主数组的这些索引上执行所需的任务传递给适配器

确保在每次填充 list view 时清除 public static Arraylist 您可以通过调用

Utils.positions.clear()

在每次通知适配器之前。

好吧,您只需使用 ArrayAdapter 的 remove() 方法从列表中删除所需的项目。

一种可能的方法是:

Object toRemove = arrayAdapter.getItem([POSITION]); arrayAdapter.remove(toRemove);

另一种方法是修改 ArrayList 并在 ArrayAdapter 上调用 notifyDataSetChanged()。

arrayList.remove([INDEX]);
arrayAdapter.notifyDataSetChanged();