【问题标题】:setting a button two tasks but only doing one at a time depending on toggle state为按钮设置两项任务,但一次只执行一项,具体取决于切换状态
【发布时间】:2014-12-21 14:43:04
【问题描述】:

我只是通过场景来尝试和帮助,我希望能够推送 b1 并将其更改/setText 为 t1,除非 t3 由于 b2 而发生更改。当这种情况发生时,我希望它为 t2 设置文本。我用许多不同的方法来检查 t3 是否已更改但没有流行,我已经尽可能简单地制作了这个应用程序。我试过 while 语句和 str.matches(t3)。

谢谢,理想情况下,我希望能够通过检查 t3 的内容而不是使用切换来做到这一点,但我已经提供了带有切换的代码,以表明它不能使用它。

提前致谢:)

public class MyActivity extends Activity {

Button b1, b2;
TextView t1, t2, t3;
String str, str1;
ToggleButton toggle;


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

    b1 = (Button) findViewById(R.id.button);
    b2 = (Button) findViewById(R.id.button2);

    t1 = (TextView) findViewById(R.id.textView1);
    t2 = (TextView) findViewById(R.id.textView2);
    t3 = (TextView) findViewById(R.id.textView3);
    toggle = (ToggleButton) findViewById(R.id.toggle);


    str1 = t3.getText().toString();

     b2.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {

             t3.setText("Hello");
             toggle.setChecked(true);

         }
     });

    {
        if (toggle.isChecked() == true) {

            b1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    t2.setText("Success!");


                }
            });

        } else if (toggle.isChecked() == false) {
            b1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    str = t1.getText().toString();
                    t1.setText(str + "1");

                }
            });
        }

    }
}

【问题讨论】:

    标签: java android eclipse android-studio


    【解决方案1】:

    你应该写这样的东西,简单又好看

    public class MyActivity extends Activity {
    
    Button b1, b2;
    TextView t1, t2, t3;
    String str, str1;
    ToggleButton toggle;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
    
        b1 = (Button) findViewById(R.id.button);
        b2 = (Button) findViewById(R.id.button2);
    
        t1 = (TextView) findViewById(R.id.textView1);
        t2 = (TextView) findViewById(R.id.textView2);
        t3 = (TextView) findViewById(R.id.textView3);
        toggle = (ToggleButton) findViewById(R.id.toggle);
    
    
    
        b2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
    
                t3.setText("Hello");
                toggle.setChecked(true);
    
            }
        });
    
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              //t2.setText( ((toggle.isChecked()) ? "Success!" : (t1.getText().toString() + "1") ) );
    
             if(toggle.isChecked()){
              t2.setText("Success!");
             }else{
              t1.setText(t1.getText().toString() + "1");
    
            }
        });
    
    }
    

    }

    【讨论】:

    • 谢谢,这几乎奏效了,但您已经声明 t2 将等于成功或 (t1 + 1)。我需要切换来使 b1 更改为 t1 或 t2。这个答案只会改变 t2。无论如何,谢谢你,你已经向我展示了解决问题的另一种方法:)
    • 我已经编辑了答案,我没有看到您正在更改两个不同的文本值。尝试给出一个有意义的名称,而不是 bt x yz。这是优秀程序员的一种品质:)
    • 非常感谢 :) 这很有效,这是一种比我能想出的任何方法都更简单、更简洁的方法。是的,我知道,它也开始让我感到困惑,啊哈,这只是我正在尝试做的事情的主体的测试应用程序,所以我认为我只是简单地命名它们,但这让它更令人困惑抱歉。再次感谢,您认为我是布尔表达式的新方法和? :.
    猜你喜欢
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    相关资源
    最近更新 更多