多选框清除上次选择

多选框清除上次选择

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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.thisnew 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() 方法没法清除,试了

1
2
3
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下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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