【问题标题】:Adding multiple values to a textView - Android向 textView 添加多个值 - Android
【发布时间】:2013-12-24 11:34:06
【问题描述】:

我目前正在尝试制作一个包含 4 个切换按钮和一个文本视图的基本应用程序。这个想法很简单:当按下按钮时,文本视图将显示当前正在按下哪些按钮。这可以包括多个按钮(例如,如果按下了 1、3 和 4)。这是我为它编写的代码:

TextView 按钮;

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

    buttons = (TextView)findViewById(R.id.textView1);

    }

public void buttonPressed(View v){
    boolean check = ((ToggleButton)v).isChecked();

    int b1 = 1, b2 = 2, b3 = 3, b4 = 4;

    switch(v.getId()){
    case R.id.toggleButton1:
        if(check){
            buttons.setText("Buttons pressed: " + b1);
        }
        else{
            buttons.setText("Buttons pressed:");
        }
        break;
    case R.id.toggleButton2:
        if(check){
            buttons.setText("Buttons pressed: " + b2);
        }
        else{
            buttons.setText("Buttons pressed:");
        }
        break;
    case R.id.toggleButton3:
        if(check){
            buttons.setText("Buttons pressed: " + b3);
        }
        else{
            buttons.setText("Buttons pressed:");
        }
        break;
    case R.id.toggleButton4:
        if(check){
            buttons.setText("Buttons pressed: " + b4);
        }
        else{
            buttons.setText("Buttons pressed:");
        }
        break;
    default:
        break;

    }



}

不幸的是,每次我运行这个程序时,textview 都会被覆盖,我无法验证是否按下了多个按钮。欢迎所有建议。

【问题讨论】:

    标签: android textview android-button


    【解决方案1】:

    如果您希望您的 textview 始终显示 ON 按钮的数量,我认为您可以这样做:

    跟踪您的按钮

    private ToggleButton[] btns = new ToggleButton[4];
    

    在 onCreate() 中:

    btn[0] = (ToggleButton)findViewById(R.id.toggleButton1);
    btn[1] = (ToggleButton)findViewById(R.id.toggleButton2);
    btn[2] = (ToggleButton)findViewById(R.id.toggleButton3);
    btn[3] = (ToggleButton)findViewById(R.id.toggleButton4);
    

    然后在您的 buttonPressed 处理程序中:

    String text = "Buttons pressed: ";
    for (int i = 0; i < 4; i++) {
        if (btn[i].isCheck()) {
            text += (i + 1) + ", ";
        }
    }
    buttons.setText(text);
    

    【讨论】:

    • 我正在写这个答案,但你先写了。所以为你+1,我放弃了我的。
    • 除了声明每个 findViewById 之外,您还可以按照循环遍历持有按钮的视图的子项的方式做一些事情,在过程中为每个子项添加一个处理程序。这将节省您声明一个数组、查找视图并为每个视图创建处理程序的工作。导致代码更整洁:)
    • @JoeBirch:感谢乔的评论。其实我也想过,但是不知道zklim是否还有别的东西(其他一些ToggleButton)。另外,他想要准确地检查哪些按钮,所以我只是建议他这样,因为 getViewById 获得的按钮的顺序取决于它们在布局文件中声明的顺序,所以如果它们没有按顺序声明(1 ->2->3->4),它可能导致错误的输出。所以我只是建议他这样,他可以按照他喜欢的方式改进它。当然,你的建议应该被考虑和认可。 :-)
    • @Son-HuyTRAN:我尝试了您的建议,但注意到一些事情:1)当我将 ToggleButton Array 设置为私有时,程序一启动就崩溃(使用三星 Galaxy Tab 2 用于测试)。当我将它设置为公开时,它修复了它,并且按钮出现了。 2) 但是,当我按下任何按钮时,程序会崩溃。我认为你的语法都是正确的,所以我不确定还会发生什么(??)。
    • @Son-HuyTRAN 没问题,只是一个想法。他还可以使用“instance of”来检查子视图是否是切换按钮的实例——无论视图的顺序如何,它都可以正常工作!
    【解决方案2】:

    如果您不想覆盖已经存在的文本,则需要使用append()。所以像

    public void buttonPressed(View v){
    boolean check = ((ToggleButton)v).isChecked();
    
    int b1 = 1, b2 = 2, b3 = 3, b4 = 4;
    
    switch(v.getId()){
    case R.id.toggleButton1:
        if(check){
            buttons.append("" + b1);
        }
        else{
            buttons.setText("Buttons pressed:");
        }
        break;
    

    您可以在onCreate() 中使用一次buttons.setText("Buttons pressed");,然后将所有内容附加到该位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多