现在项目很多情况下会用到全选和单选,前几天就刚写了一个,代码如下:
1.效果图:
2.one_or_all.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="10dp" android:paddingTop="10dp"> <ImageView android:id="@+id/batch_ic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginRight="15dp" android:src="@drawable/check_delect" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="baiding白丁" android:textSize="20sp" /> </RelativeLayout>
3.activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.oneorall.MainActivity"> <TextView android:id="@+id/all" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="全选" android:textSize="16sp" /> <ListView android:paddingLeft="20dp" android:paddingRight="20dp" android:id="@+id/list" android:layout_width="match_parent" android:layout_height="wrap_content"></ListView> </LinearLayout>
4.对象User:
class User { private String num; public User(String num) { this.num = num; } public String getNum() { return num; } }
5.适配器和MainActivity:
public class MainActivity extends AppCompatActivity { TextView all; ListView list; List<User> userList;//数据 // 记录id的集合 List<Integer> jilu = new ArrayList<>(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); all = findViewById(R.id.all); list = findViewById(R.id.list); userList = new LinkedList<>(); for (int i = 0; i < 25; i++) { userList.add(new User("baiding白丁" + i)); } final MyAdapter adapter = new MyAdapter(userList); list.setAdapter(adapter); //全选 all.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (jilu.size() == userList.size()) { deleteAll(); } else { deleteAll(); for (int i = 0; i < userList.size(); i++) { jilu.add(i); } } adapter.notifyDataSetChanged(); } }); //单选 list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (is(position)) { jilu.remove(delete(position)); adapter.notifyDataSetChanged(); } else { jilu.add(position); adapter.notifyDataSetChanged(); } } }); } class MyAdapter extends BaseAdapter { List<User> list; public MyAdapter(List<User> list) { this.list = list; } public List<User> getList() { return list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { final MyHolder holder; if (convertView == null) { convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.one_or_all, null); holder = new MyHolder(convertView); convertView.setTag(holder); } else { holder = (MyHolder) convertView.getTag(); } holder.bindView(list.get(position)); if (is(position)) { holder.imageView.setSelected(true); } else { holder.imageView.setSelected(false); } return convertView; } class MyHolder { TextView textView; ImageView imageView; public MyHolder(View convertView) { textView = convertView.findViewById(R.id.text); imageView = convertView.findViewById(R.id.batch_ic); } public void bindView(User user) { textView.setText(user.getNum()); } } } // 删除全部 private void deleteAll() { Iterator it = jilu.iterator(); while (it.hasNext()) { it.next(); it.remove(); } } // 删除 private int delete(int a) { for (int i = 0; i < jilu.size(); i++) { if (jilu.get(i) == a) { return i; } } return -1; } // 判断是否记录 private boolean is(int a) { for (int i = 0; i < jilu.size(); i++) { if (jilu.get(i) == a) { return true; } } return false; } }