onClick编辑ListView上的CheckBox数据

时间:2016-08-18 08:23:22

标签: android listview checkbox edit fileoutputstream

我使用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);
            }}
    });
}

为了更好地理解它的图片

enter image description here

忽略其他按钮

2 个答案:

答案 0 :(得分:1)

制作public class utils并在其中创建public static ArrayList<Integer> positions。在adapter listview setOnClickListener CheckBox 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充气布局后适配器的功能添加此

public static Arraylist

通过这种方式,您可以获得list view中的所有索引列表,当您按下按钮(例如编辑删除等)时会检查这些索引。单击这些按钮,您可以对传递给主数组的这些索引执行所需的任务适配器

请确保在每次填充Utils.positions.clear() 时清除/** * @InheritanceType("JOINED") * @DiscriminatorColumn(name="type", type="string") * @DiscriminatorMap({"element"="AbstractElement", "question"="Question", "text"="TextItem", "media"="MediaItem"}) */ class AbstractElement extends AbstractEntity implements GridElementInterface { //... } 您可以通过调用

来执行此操作
/**
 * @MappedSuperclass
 */
class AbstractEntity
{
    //...
}

每次通知适配器之前。

答案 1 :(得分:0)

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

可能的方法是:

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

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

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