【问题标题】:How to remove a value from programatic-created checkbox?如何从编程创建复选框中删除一个值?
【发布时间】:2018-09-27 09:23:13
【问题描述】:

该应用程序是关于使用复选框进行简单调查。复选框值来自 REST Api,如 ["option1", "option2"...]

我会将选中的复选框作为列表发布。除了删除未选择的项目外,所有设置和工作。如何从列表中获取和删除“未选择”数据? (用户可以进行更改)我尝试使用 List 和 HashMap,但无法成功。提前致谢!

public class MainActivity extends AppCompatActivity {

LinearLayout linear_checkbox;
List<String> answerList= new ArrayList<>();
List<String> checkedList = new ArrayList<>();

Map<String,String> map = new HashMap<>();

Button button_send;

int j;

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

    //
    linear_checkbox = (LinearLayout)findViewById(R.id.linear_checkbox);
    button_send= (Button)findViewById(R.id.button_send);
    //

    answerList.add("Photography");
    answerList.add("Music");
    answerList.add("Skateboard");

    listChoices(cevapList);

    button_send.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //Toast.makeText(MainActivity.this, "LIST: "+"\n"+ checkedList.toString(), Toast.LENGTH_SHORT).show();
            //Toast.makeText(MainActivity.this, ""+map.toString(), Toast.LENGTH_SHORT).show();
        }
    });

}

public void listChoices(List<String> textList){

    textList = answerList;

    for(j=0; j<textList.size(); j++){
        final CheckBox cb = new CheckBox(getApplicationContext());
        cb.setText(textList.get(j));
        cb.setTextColor(Color.parseColor("#E7740D"));
        linear_checkbox.addView(cb);

        cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {


                if(b==true){
                    Toast.makeText(MainActivity.this, ""+cb.getText()+" selected", Toast.LENGTH_SHORT).show();
                    String key = String.valueOf(j);
                    //map.put(key,cb.getText().toString());
                    secilenlerList.add(cb.getText().toString());
                }else{
                    Toast.makeText(MainActivity.this, ""+cb.getText()+" unselected", Toast.LENGTH_SHORT).show();

                }

            }
        });
    }

}

}

【问题讨论】:

  • 您是使用回收站视图还是在线性布局中添加所有复选框?
  • 当复选框被选中时,您似乎在列表中添加了 checkbox.getText(),但在未选中复选框时没有将其删除。

标签: java android


【解决方案1】:

更新你的代码它工作正常。当用户取消选中任何复选框项时,您没有进行更改。

 public class MainActivity extends AppCompatActivity {

    LinearLayout linear_checkbox;
    List<String> answerList = new ArrayList<>();
    List<String> checkedList = new ArrayList<>();

    Map<String, String> map = new HashMap<>();

    Button button_send;

    int j;
    private ArrayList<String> secilenlerList;

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

        //
        linear_checkbox = (LinearLayout) findViewById(R.id.linear_checkbox);
        button_send = (Button) findViewById(R.id.button_send);
        //

        answerList.add("Photography");
        answerList.add("Music");
        answerList.add("Skateboard");

        listChoices(answerList);

        button_send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "LIST: " + "\n" + secilenlerList.toString(), Toast.LENGTH_SHORT).show();
                //Toast.makeText(MainActivity.this, ""+map.toString(), Toast.LENGTH_SHORT).show();
            }
        });

    }

    public void listChoices(List<String> textList) {
        textList = answerList;
        secilenlerList = new ArrayList<>();

        for (j = 0; j < textList.size(); j++) {
            final CheckBox cb = new CheckBox(getApplicationContext());
            cb.setText(textList.get(j));
            cb.setTextColor(Color.parseColor("#E7740D"));
            linear_checkbox.addView(cb);

            cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton compoundButton, boolean ischecked) {


                    if (ischecked) {
                        Toast.makeText(MainActivity.this, "" + cb.getText() + " selected", Toast.LENGTH_SHORT).show();
                        String key = String.valueOf(j);
                        //map.put(key,cb.getText().toString());
                        if (!secilenlerList.contains(cb.getText().toString()))
                            secilenlerList.add(cb.getText().toString());
                    } else {
                        if (secilenlerList.contains(cb.getText().toString()))
                            secilenlerList.remove(cb.getText().toString());
                        Toast.makeText(MainActivity.this, "" + cb.getText() + " unselected", Toast.LENGTH_SHORT).show();

                    }

                }
            });
        }

    }
}

【讨论】:

    猜你喜欢
    • 2021-09-20
    • 2017-10-08
    • 2011-08-23
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多