ListView批量刪除數據
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/public_layout_ii"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/edit_bar"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#fbfbf4"
android:padding="5dp">
<CheckBox
android:id="@+id/check_all"
android:layout_width="60dp"
android:layout_height="match_parent"
android:background="@drawable/edit_button_bg"
android:button="@null"
android:gravity="center"
android:text="全選"
android:visibility="gone" />
<Button
android:id="@+id/btn_delete"
android:layout_width="60dp"
android:layout_height="match_parent"
android:layout_marginRight="10dp"
android:layout_toLeftOf="@+id/cb_edit"
android:background="@drawable/edit_button_bg"
android:text="刪除"
android:visibility="gone" />
<CheckBox
android:id="@+id/cb_edit"
android:layout_width="60dp"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:background="@drawable/edit_button_bg"
android:button="@null"
android:gravity="center"
android:text="編輯" />
</RelativeLayout>
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
item_layout:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/llRoot"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:padding="2dp">
<CheckBox
android:id="@+id/check_box"
android:layout_width="40dp"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:gravity="center"
android:visibility="gone" />
<TextView
android:id="@+id/tvName"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:textColor="#000" />
</LinearLayout>
public class ListViewAdapter extends BaseAdapter {
private Context context;
private ArrayList<String> data;
private ArrayList<Boolean> state;
private LayoutInflater inflate;
private boolean visibilityFlag;
public ListViewAdapter(Context context, ArrayList<Boolean> state, ArrayList<String> data) {
this.context = context;
this.data = data;
this.state = state;
inflate = LayoutInflater.from(context);
}
public void setVisibilityFlag(boolean visibilityFlag) {
this.visibilityFlag = visibilityFlag;
notifyDataSetChanged();
}
public void setData(ArrayList<String> data) {
this.data = data;
notifyDataSetChanged();
}
public void setState(ArrayList<Boolean> state) {
this.state = state;
notifyDataSetChanged();
}
@Override
public int getCount() {
return data == null ? 0 : data.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder;
if (convertView == null) {
convertView = inflate.inflate(R.layout.item_layout, parent, false);
holder = new Holder(convertView);
convertView.setTag(holder);
} else {
holder = ((Holder) convertView.getTag());
}
final String str = data.get(position);
if (!TextUtils.isEmpty(str)) {
holder.tvName.setText(str);
holder.check_box.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clickListener != null) {
clickListener.itemClickIsCheckedListener(str);
}
}
});
if (visibilityFlag) {
holder.check_box.setVisibility(View.VISIBLE);
} else {
holder.check_box.setVisibility(View.GONE);
}
if (state != null && state.size() > 0) {
if (state.get(position)) {
holder.check_box.setChecked(true);
} else {
holder.check_box.setChecked(false);
}
}
}
return convertView;
}
class Holder {
TextView tvName;
LinearLayout llRoot;
CheckBox check_box;
public Holder(View view) {
tvName = (TextView) view.findViewById(R.id.tvName);
llRoot = (LinearLayout) view.findViewById(R.id.llRoot);
check_box = (CheckBox) view.findViewById(R.id.check_box);
}
}
ClickListener clickListener;
public void setClickListener(ClickListener clickListener) {
this.clickListener = clickListener;
}
public interface ClickListener {
void itemClickIsCheckedListener(String str);
}
}
public class MainActivity extends AppCompatActivity implements ListViewAdapter.ClickListener {
private Button delete;
private CheckBox edit;
private CheckBox all;
private ListView listView;
private ArrayList<String> data;
private ArrayList<String> selectData;
private ArrayList<Boolean> state;
private ListViewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
initAdapter();
}
private void initAdapter() {
adapter = new ListViewAdapter(this, state, data);
adapter.setClickListener(this);
listView.setAdapter(adapter);
}
private void initView() {
delete = ((Button) findViewById(R.id.btn_delete));
edit = ((CheckBox) findViewById(R.id.cb_edit));
all = ((CheckBox) findViewById(R.id.check_all));
listView = ((ListView) findViewById(R.id.listView));
all.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (all.isChecked()) {
Collections.replaceAll(state, false, true);
} else {
Collections.replaceAll(state, true, false);
}
adapter.setState(state);
}
});
edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (edit.isChecked()) {
all.setVisibility(View.VISIBLE);
delete.setVisibility(View.VISIBLE);
adapter.setVisibilityFlag(true);
} else {
all.setVisibility(View.GONE);
delete.setVisibility(View.GONE);
adapter.setVisibilityFlag(false);
}
}
});
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (state.indexOf(false) == -1) {
data.removeAll(data);
state.removeAll(state);
} else {
removeData();
}
adapter.setData(data);
adapter.setState(state);
}
});
}
private void removeData() {
for (int i = 0; i < state.size(); i++) {
if (state.get(i)) { //如果被選中則把該條數據添加到selectData集合中
selectData.add(data.get(i));
}
}
for (int j = 0; j < selectData.size(); j++) {
for (int i = 0; i < data.size(); i++) {
if (data.get(i) != null) {
if (selectData.get(j) == data.get(i)) {
data.set(i, null); //把被選中的數據設置爲null
}
}
}
}
for (int i = 0; i < data.size(); i++) {
if (data.get(i) == null) { //對爲null的數據刪除
data.remove(i);
i--;
}
}
for (int i = 0; i < state.size(); i++) {
if (state.get(i)) {
state.remove(i); //把對應的標記刪除
i--;
}
}
}
private void initData() {
data = new ArrayList<>();
for (int i = 0; i < 20; i++) {
data.add("NAME_" + i);
}
state = new ArrayList<>();
for (int i = 0; i < data.size(); i++) {
state.add(false);
}
selectData = new ArrayList<>();
}
@Override
public void itemClickIsCheckedListener(String str) {
for (int i = 0; i < data.size(); i++) {
if (data.get(i).equals(str)) {
if (state.get(i)) {
state.set(i, false);
} else {
state.set(i, true);
}
}
}
adapter.setState(state);
}
}
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/text_bg_i"
android:state_pressed="true"/>
<item android:drawable="@drawable/text_bg_ii"/>
</selector>
大體的思路就是這樣,至於代碼精不精簡看個人。