多选框清除上次选择

多选框清除上次选择

package com.imooc.dateandtimedialog;

import android.app.DatePickerDialog;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private Button btn_setDate, btn_singleDialog, btn_multiDialog;
    private TextView tv_info;
    private AlertDialog singleListDlg, multiListDlg;
    private DatePickerDialog datePickerDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView(); //初始化控件
    }

    //初始化控件
    private void initView(){
        btn_setDate = (Button) findViewById(R.id.btn_setDate);
        btn_singleDialog = (Button) findViewById(R.id.btn_singleDialog);
        btn_multiDialog = (Button) findViewById(R.id.btn_multiDialog);
        tv_info = (TextView) findViewById(R.id.tv_info);
        initDateDialog();
        initSingleListDialog();
        initMultiListDialog();

        //设置监听事件
        btn_setDate.setOnClickListener(this);
        btn_singleDialog.setOnClickListener(this);
        btn_multiDialog.setOnClickListener(this);
    }

    //初始化dateDialog
    private void initDateDialog(){
        datePickerDialog = new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                Toast.makeText(MainActivity.this, year+"年"+(monthOfYear+1)+"月"+dayOfMonth+"日", Toast.LENGTH_LONG).show();
            }
        }, Calendar.DAY_OF_YEAR, Calendar.DAY_OF_MONTH, Calendar.DATE);
    }

    //初始化singleListDlg
    private void initSingleListDialog(){
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle("性别选择");
        builder.setIcon(android.R.drawable.btn_star);
        builder.setSingleChoiceItems(R.array.array_sex, android.R.layout.simple_selectable_list_item, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch (which){
                    case 0:
                        Toast.makeText(MainActivity.this, "您选择了:男 性", Toast.LENGTH_LONG).show();
                        break;
                    case 1:
                        Toast.makeText(MainActivity.this, "您选择了:女 性", Toast.LENGTH_LONG).show();
                        break;
                    case 2:
                        Toast.makeText(MainActivity.this, "您选择了:性别未知", Toast.LENGTH_LONG).show();
                        break;
                    case 3:
                        Toast.makeText(MainActivity.this, "您选择了:你猜", Toast.LENGTH_LONG).show();
                        break;
                }
                singleListDlg.dismiss();
            }
        });
        singleListDlg = builder.create();
    }

    //初始化multiListDlg
    private void initMultiListDialog(){
        final String[] loves = getResources().getStringArray(R.array.array_love);
        final boolean[] isCheckedItem = new boolean[loves.length];

        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle("选择个人爱好");
        builder.setIcon(android.R.drawable.btn_star);
        builder.setMultiChoiceItems(R.array.array_love, isCheckedItem, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                isCheckedItem[which] = isChecked;
            }
        });
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String info = "个人爱好:\n";    //换行好看点,视频没有换行
                for (int i=0; i<loves.length; i++){
                    if (isCheckedItem[i])
                        info = info + loves[i]+"\n";
                }
                tv_info.setText(info);
                multiListDlg.dismiss();
            }
        });
        multiListDlg = builder.create();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_setDate:
                datePickerDialog.show();
                break;
            case R.id.btn_singleDialog:
                singleListDlg.getListView().clearChoices();
                singleListDlg.show();
                break;
            case R.id.btn_multiDialog:

                multiListDlg.show();
                break;
        }
    }
}

单选框在show()之前用 getListView().clearChoices() 方法可以初始化,清除上次选择。但,多选框用 getListView().clearChoice() 方法没法清除,试了

for (int i=0; i<multiListDlg.getListView().getCount(); i++){
    multiListDlg.getListView().setItemChecked(i, false);
}

也不行。请问,有什么方法可以清除上次的选择?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
提问者 人土土zzzzz 2017-05-03 16:47:03

我第一次就是像你说的那样写的,结果老师说效率低,才给98分。http://img1.sycdn.imooc.com/climg//590998f3000111f606460422.jpg

irista23 2017-05-03 16:24:19

解决思路:

每次点击按钮重新生成一个独立的多选框。

解决方法:

1、将initMultiListDialog()方法中的multiListDlg = builder.create();换成builder.show();

2、在回调方法onClick()中,将case 多选按钮条件中的执行方法换成initMultiListDialog();

3、去掉initView()中对initMultiListDialog()方法的调用。

  • 提问者 人土土zzzzz #1
    我第一次就是像你说的那样写的,结果老师说效率低,才给98分。评语是:讲师点评: 程序可以正常运行,相关控件id的命名也符合规范。Java文件中代码合理的封装在相关方法中,避免了在onCreate方法中出现过多的代码。但细节处理的不到位,如:没有考虑到效率的问题,不应该点一次按钮就创建一次对话框,这样效率太低,应该在初始化控件的时候就把三个对话框创建出来,当点按钮时再显示出对话框就行了。作业中如果有疑问,可在问答区进行提问,我们的助教老师会帮您答疑解惑,祝学习愉快!
    2017-05-03 16:48:02
  • irista23 回复 提问者 人土土zzzzz #2
    如果需求中明确要求每次打开清除状态信息,建议你使用上面回复中的方法最简单,而如果没有要求清空数据,采用作业批复中的修改方法会提高效率,实际开发中需要根据具体需求而选择方法。如果解决了你的疑惑,请采纳,祝学习愉快~
    2017-05-03 17:43:12
  • 提问者 人土土zzzzz 回复 irista23 #3
    演示视频里第二次打开时状态是清空的,我不清空的话会扣分吧。
    2017-05-04 09:49:32
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师