5.android listview 里写了CheckBok 点击事件冲突+ListView嵌套CheckBok实现全选,单选,反选,取消,删除的操作

导读:本篇文章讲解 5.android listview 里写了CheckBok 点击事件冲突+ListView嵌套CheckBok实现全选,单选,反选,取消,删除的操作,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

关于listview 里写了CheckBok 点击事件不好用了的问题,原因是焦点传递到了子控件。
导致别的控件没焦点,只有checkbok有。
解决办法是在xml最外层里加一个阻止焦点传递到子控件的代码
<!–阻止焦点向子控件传递    android:descendantFocusability=”blocksDescendants”  –>

 

 //ListView嵌套CheckBok实现全选,单选,反选,取消,删除的操作:

//效果图: 

5.android listview 里写了CheckBok 点击事件冲突+ListView嵌套CheckBok实现全选,单选,反选,取消,删除的操作

 

//第一步 我的Activity布局:

 

<?xml version="1.0" encoding="utf-8"?>
<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=".MainActivity">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/mQuanXuan"
            android:text="全选"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content" />
        <Button
            android:id="@+id/mFanXuan"
            android:text="反选"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content" />
        <Button
            android:id="@+id/mQuXiao"
            android:text="取消"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content" />
        <Button
            android:id="@+id/mShanChu"
            android:text="删除"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <ListView
        android:id="@+id/mLV"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>
    
</LinearLayout>

//第二步 在Activity里具体代码实现:

 

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button mQuanXuan;
    private Button mFanXuan;
    private Button mQuXiao;
    private Button mShanChu;
    private ListView mLV;

    private List<String> mList;
    private List<Boolean> mChecklist;
    private Apader apader;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
        initApader();
    }

    private void initView() {
        mQuanXuan = (Button) findViewById(R.id.mQuanXuan);
        mFanXuan = (Button) findViewById(R.id.mFanXuan);
        mQuXiao = (Button) findViewById(R.id.mQuXiao);
        mShanChu = (Button) findViewById(R.id.mShanChu);
        mLV = (ListView) findViewById(R.id.mLV);

        mQuanXuan.setOnClickListener(this);
        mFanXuan.setOnClickListener(this);
        mQuXiao.setOnClickListener(this);
        mShanChu.setOnClickListener(this);
    }

    private void initData() {
        mList = new ArrayList<String>();
        mChecklist = new ArrayList<Boolean>();
        for (int i = 0; i < 20; i++) {
            mList.add("奔波儿灞" + i);
            mChecklist.add(false);
        }
    }

    private void initApader() {
        apader = new Apader(mList, MainActivity.this);
        apader.setData(mList, mChecklist);
        mLV.setAdapter(apader);

        mLV.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                mChecklist.set(position, !mChecklist.get(position));
                apader.setData(mList, mChecklist);
                apader.notifyDataSetChanged();
            }
        });
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.mQuanXuan:
                select_all();
                break;
            case R.id.mFanXuan:
                un_select();
                break;
            case R.id.mQuXiao:
                cancel();
                break;
            case R.id.mShanChu:
                delete();
                break;
        }
    }

    //全选
    private void select_all() {
        for (int i = 0; i < mChecklist.size(); i++) {
            mChecklist.set(i, true);
        }
        apader.setData(mList, mChecklist);
        apader.notifyDataSetChanged();
    }

    //反选
    private void un_select() {
        for (int i = 0; i < mChecklist.size(); i++) {
            mChecklist.set(i, !mChecklist.get(i));
        }
        apader.setData(mList, mChecklist);
        apader.notifyDataSetChanged();
    }

    //取消
    private void cancel() {
        for (int i = 0; i < mChecklist.size(); i++) {
            if (mChecklist.get(i)) {
                mChecklist.set(i, false);
            }
        }
        apader.setData(mList, mChecklist);
        apader.notifyDataSetChanged();
    }

    //删除
    private void delete() {
        for (int i = 0; i < mChecklist.size(); i++) {
            if (mChecklist.get(i)) {
                mChecklist.remove(i);
                mList.remove(i);
                i--;
            }
        }
        apader.setData(mList, mChecklist);
        apader.notifyDataSetChanged();
    }

}

//第三步 我的ListView适配器:

 

public class Apader extends BaseAdapter {
    private List<String> mList;
    private Context context;
    private List<Boolean> mCheckList;

    public void setData(List<String> mList, List<Boolean> mCheckList) {
        this.mList = mList;
        this.mCheckList = mCheckList;
    }

    public Apader(List<String> mList, Context context) {
        this.mList = mList;
        this.context = context;
    }

    @Override
    public int getCount() {
        return mList.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        convertView = LayoutInflater.from(context).inflate(R.layout.item_layout, null);
        ViewHolder viewHolder=ViewHolder.getViewHolder(convertView);
        viewHolder.mText.setText(mList.get(position));
        viewHolder.mCheck.setChecked(mCheckList.get(position));
        viewHolder.mCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                mCheckList.set(position,isChecked);
                notifyDataSetChanged();
            }
        });
        return convertView;
    }


    public static class ViewHolder {
        public View rootView;
        public TextView mText;
        public CheckBox mCheck;

        public ViewHolder(View rootView) {
            this.rootView = rootView;
            this.mText = (TextView) rootView.findViewById(R.id.mText);
            this.mCheck = (CheckBox) rootView.findViewById(R.id.mCheck);
        }

        public static ViewHolder getViewHolder(View convertView) {
            ViewHolder viewHolder = (ViewHolder) convertView.getTag();
            if (viewHolder==null){
                viewHolder=new ViewHolder(convertView);
                convertView.setTag(viewHolder);
            }
            return viewHolder;
        }
    }
}

//第四步 我的ListView适配器布局:记得要加android:descendantFocusability=”blocksDescendants”

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:descendantFocusability="blocksDescendants"
    >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="100dp">

        <TextView
            android:id="@+id/mText"
            android:textSize="20sp"
            android:textStyle="bold"
            android:layout_marginLeft="10dp"
            android:gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="match_parent" />

        <CheckBox
            android:id="@+id/mCheck"
            android:layout_marginRight="10dp"
            android:layout_alignParentRight="true"
            android:layout_width="wrap_content"
            android:layout_height="match_parent" />
    </RelativeLayout>

</LinearLayout>

//———————————————————————–完————————————————————————————-

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118388.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!