ListView实现单选、多选和全选、反选

现在项目很多情况下会用到全选和单选,前几天就刚写了一个,代码如下:

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;
    }
}


猜你喜欢

转载自blog.csdn.net/qq_41873558/article/details/80642167