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
。在 listview
的 adapter
中,在 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();
我使用 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
。在 listview
的 adapter
中,在 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();