Android - 如何保持按钮被点击(选中)?

Android - How do I keep a button clicked (Selected)?

我正在尝试为这两个数字构建一个带有两个 TextView 字段的计算器。我想出了如何使用 "in-app" 数字键盘输入数字,操作数 1 [textView](我知道使用 EditText 会更容易,但这是用于分配)。我无法切换到第二个 textView,操作数 2 [textView2]。

当我为 textView 输入完数字后,我想切换到 textView2(使用加号、减号、乘号、and/or div 按钮)并继续输入数字,这样我可以用它来计算。

这是我的应用程序的外观图片。请忽略星星、进度条和 raido 按钮,因为它们是作业的一部分,但与计算器无关。

你对我如何做到这一点有什么建议吗?

Android Code

package com.example.tristan.assn2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.view.View.OnClickListener;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    ArrayList<String> list1 = new ArrayList<String>();
    ArrayList<String> list2 = new ArrayList<String>();
    String operand1 = "";
    String operand2 = "";
    String oneS = "1";
    String twoS = "2";
    String threeS = "3";
    String fourS = "4";
    String fiveS = "5";
    String sixS = "6";
    String sevenS = "7";
    String eightS = "8";
    String nineS = "9";
    String zeroS = "0";
    String dotS = ".";

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

    public void sendMessage(View view)
    {
        Button clickedButton = (Button) view;


        Button one =  (Button) findViewById(R.id.button);
        Button two =  (Button) findViewById(R.id.button2);
        Button three =  (Button) findViewById(R.id.button3);
        Button four =  (Button) findViewById(R.id.button4);
        Button five =  (Button) findViewById(R.id.button5);
        Button six =  (Button) findViewById(R.id.button6);
        Button seven =  (Button) findViewById(R.id.button7);
        Button eight =  (Button) findViewById(R.id.button8);
        Button nine =  (Button) findViewById(R.id.button9);
        Button zero =  (Button) findViewById(R.id.button10);

        Button dot =  (Button) findViewById(R.id.button11);
        Button clear =  (Button) findViewById(R.id.button12);

        Button plus =  (Button) findViewById(R.id.button17);
        Button minus =  (Button) findViewById(R.id.button15);
        Button mult =  (Button) findViewById(R.id.button19);
        Button div =  (Button) findViewById(R.id.button21);
        Button sr =  (Button) findViewById(R.id.button16);
        Button fac =  (Button) findViewById(R.id.button20);
        Button dd =  (Button) findViewById(R.id.button22);

        Button equal =  (Button) findViewById(R.id.button23);

        //------------------------------------------------------------------------------------------



        TextView textView = (TextView) findViewById(R.id.textView);
        TextView textView2 = (TextView) findViewById(R.id.textView2);


            //OPERAND1
        if(clickedButton == minus) {
            operand1 = "-";
            list1.add(operand1);
        }

            if (clickedButton == one) {
                operand1 = oneS;
                list1.add(operand1);
            }
            if (clickedButton == two) {
                operand1 = twoS;
                list1.add(operand1);
            }
            if (clickedButton == three) {
                operand1 = threeS;
                list1.add(operand1);
            }
            if (clickedButton == four) {
                operand1 = fourS;
                list1.add(operand1);
            }
            if (clickedButton == five) {
                operand1 = fiveS;
                list1.add(operand1);
            }
            if (clickedButton == six) {
                operand1 = sixS;
                list1.add(operand1);
            }
            if (clickedButton == seven) {
                operand1 = sevenS;
                list1.add(operand1);
            }
            if (clickedButton == eight) {
                operand1 = eightS;
                list1.add(operand1);
            }
            if (clickedButton == nine) {
                operand1 = nineS;
                list1.add(operand1);
            }
            if (clickedButton == zero) {
                operand1 = zeroS;
                list1.add(operand1);
            }
            if (clickedButton == dot) {
                operand1 = dotS;
                list1.add(operand1);
            }
            //Builds String from ArrayList
            StringBuilder sb1 = new StringBuilder();
            for (String s1 : list1) {
                sb1.append(s1);
            }
            //STRING NUMBER
            String output1 = sb1.toString();
            textView.setText(output1);

        //NEED TO CONVERT TO DOUBLE*****************





        //IF plus, minus, mult, div is pressed, switch to Operand 2 and input numbers

        if(clickedButton == plus || clickedButton == minus || clickedButton == mult || clickedButton == div) {


            if (clickedButton == one) {
                operand2 = oneS;
                list2.add(operand2);
            }
            if (clickedButton == two) {
                operand2 = twoS;
                list2.add(operand2);
            }
            if (clickedButton == three) {
                operand2 = threeS;
                list2.add(operand2);
            }
            if (clickedButton == four) {
                operand2 = fourS;
                list2.add(operand2);
            }
            if (clickedButton == five) {
                operand2 = fiveS;
                list2.add(operand2);
            }
            if (clickedButton == six) {
                operand2 = sixS;
                list2.add(operand2);
            }
            if (clickedButton == seven) {
                operand2 = sevenS;
                list2.add(operand2);
            }
            if (clickedButton == eight) {
                operand2 = eightS;
                list2.add(operand2);
            }
            if (clickedButton == nine) {
                operand2 = nineS;
                list2.add(operand2);
            }
            if (clickedButton == zero) {
                operand2 = zeroS;
                list2.add(operand2);
            }
            if (clickedButton == dot) {
                operand2 = dotS;
                list2.add(operand2);
            }
            //Builds String from ArrayList
            StringBuilder sb2 = new StringBuilder();
            for (String s2 : list2) {
                sb2.append(s2);
            }
            //STRING NUMBER
            String output2 = sb2.toString();
            textView2.setText(output2);
        }
    }
}

XML File

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.tristan.assn2.MainActivity">

    <Button
        android:text="/"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button21"
        android:fontFamily="sans-serif-medium"
        android:layout_alignBaseline="@+id/button18"
        android:layout_alignBottom="@+id/button18"
        android:layout_toRightOf="@+id/button18"
        android:layout_alignRight="@+id/button15"
        android:layout_alignEnd="@+id/button15"
        android:onClick="sendMessage"/>

    <Button
        android:text="3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button3"
        android:layout_alignBaseline="@+id/button"
        android:layout_alignBottom="@+id/button"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:onClick="sendMessage"/>

    <Button
        android:text="2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button2"
        android:layout_alignBaseline="@+id/button"
        android:layout_alignBottom="@+id/button"
        android:layout_toLeftOf="@+id/button3"
        android:layout_toStartOf="@+id/button3"
        android:onClick="sendMessage"/>

    <Button
        android:text="1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:layout_marginBottom="61dp"
        android:layout_alignParentBottom="true"
        android:layout_toLeftOf="@+id/button2"
        android:layout_toStartOf="@+id/button2"
        android:onClick="sendMessage"/>

    <Button
        android:text="4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button4"
        android:layout_above="@+id/button2"
        android:layout_alignLeft="@+id/button11"
        android:layout_alignStart="@+id/button11"
        android:onClick="sendMessage"/>

    <Button
        android:text="5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/button2"
        android:layout_toLeftOf="@+id/button3"
        android:layout_toStartOf="@+id/button3"
        android:id="@+id/button5"
        android:onClick="sendMessage"/>

    <Button
        android:text="6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/button5"
        android:layout_toRightOf="@+id/button2"
        android:layout_toEndOf="@+id/button2"
        android:id="@+id/button6"
        android:onClick="sendMessage"/>

    <Button
        android:text="7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button7"
        android:layout_above="@+id/button4"
        android:layout_alignLeft="@+id/button4"
        android:layout_alignStart="@+id/button4"
        android:onClick="sendMessage"/>

    <Button
        android:text="8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/button7"
        android:layout_toRightOf="@+id/button4"
        android:layout_toEndOf="@+id/button4"
        android:id="@+id/button8"
        android:onClick="sendMessage"/>

    <Button
        android:text="9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/button6"
        android:layout_toRightOf="@+id/button5"
        android:id="@+id/button9"
        android:layout_alignTop="@+id/button8"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:onClick="sendMessage"/>

    <Button
        android:text="0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button3"
        android:layout_toLeftOf="@+id/button3"
        android:layout_toStartOf="@+id/button3"
        android:id="@+id/button10"
        android:onClick="sendMessage"/>

    <Button
        android:text="."
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/button10"
        android:layout_toLeftOf="@+id/button2"
        android:id="@+id/button11"
        android:layout_below="@+id/button5"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginLeft="87dp"
        android:layout_marginStart="87dp"
        android:layout_marginTop="47dp"
        android:onClick="sendMessage"/>

    <Button
        android:text="-"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button15"
        android:layout_alignTop="@+id/button7"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginLeft="41dp"
        android:layout_marginStart="41dp"
        android:layout_toLeftOf="@+id/button4"
        android:layout_toStartOf="@+id/button4"
        android:layout_marginRight="10dp"
        android:layout_marginEnd="10dp"
        android:onClick="sendMessage"/>

    <Button
        android:text="+"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button17"
        android:layout_alignBaseline="@+id/button15"
        android:layout_alignBottom="@+id/button15"
        android:layout_toStartOf="@+id/button4"
        android:layout_toLeftOf="@+id/button4"
        android:layout_marginRight="47dp"
        android:layout_marginEnd="47dp"
        android:onClick="sendMessage" />

    <Button
        android:text="x"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button18"
        android:layout_below="@+id/button17"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignRight="@+id/button17"
        android:layout_alignEnd="@+id/button17"
        android:fontFamily="sans-serif-medium"
        android:onClick="sendMessage"/>

    <Button
        android:text="x"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button19"
        android:layout_below="@+id/button17"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignRight="@+id/button17"
        android:layout_alignEnd="@+id/button17"
        android:fontFamily="sans-serif-medium"
        android:onClick="sendMessage"/>

    <Button
        android:text="sr"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button16"
        android:fontFamily="sans-serif-medium"
        android:layout_below="@+id/button4"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_toLeftOf="@+id/button20"
        android:layout_toStartOf="@+id/button20"
        android:onClick="sendMessage"/>

    <Button
        android:text="!"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button20"
        android:fontFamily="sans-serif-medium"
        android:layout_below="@+id/button21"
        android:layout_alignLeft="@+id/button15"
        android:layout_alignStart="@+id/button15"
        android:layout_alignRight="@+id/button21"
        android:layout_alignEnd="@+id/button21"
        android:onClick="sendMessage"/>

    <Button
        android:text="DD - DMS"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/button11"
        android:layout_toStartOf="@+id/button"
        android:id="@+id/button22"
        android:layout_alignRight="@+id/button20"
        android:layout_alignEnd="@+id/button20"
        android:onClick="sendMessage"/>

    <TextView
        android:hint="Operand 1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/textView"
        android:layout_toLeftOf="@+id/button5"
        android:layout_toStartOf="@+id/button5" />

    <TextView
        android:hint="Operand 2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="13dp"
        android:id="@+id/textView2"
        android:layout_toLeftOf="@+id/button8"
        android:layout_toStartOf="@+id/button8" />

    <TextView
        android:hint="Results"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:id="@+id/textView3"
        android:layout_toRightOf="@+id/textView"
        android:layout_toEndOf="@+id/textView" />

    <RatingBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/ratingBar"
        android:isIndicator="false"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

    <ProgressBar
        style="?android:attr/progressBarStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/progressBar"
        android:layout_alignBottom="@+id/ratingBar"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginLeft="12dp"
        android:layout_marginStart="12dp" />

    <RadioButton
        android:text="Use for Operand 1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/radioButton"
        android:layout_below="@+id/button23"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

    <RadioButton
        android:text="Use for Operand 2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/radioButton"
        android:layout_alignLeft="@+id/radioButton"
        android:layout_alignStart="@+id/radioButton"
        android:id="@+id/radioButton2" />

    <Button
        android:text="="
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button23"
        android:layout_alignTop="@+id/textView2"
        android:layout_toRightOf="@+id/textView2"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:onClick="sendMessage"/>

    <Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/spinner"
        android:layout_below="@+id/radioButton2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:text="C"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button12"
        android:layout_alignBaseline="@+id/button10"
        android:layout_alignBottom="@+id/button10"
        android:layout_toRightOf="@+id/button8"
        android:layout_toEndOf="@+id/button8"
        android:onClick="sendMessage"/>

</RelativeLayout>

您必须在 plus/minus/.. 按钮点击发生后收听按键点击。使用旗帜。单击 plus/minus/.. 或 textview2 时设置标志 1,并将 textview 更改为 textview2,将 list1 更改为 list2。单击 textview1 时反之亦然。

只要用户单击运算符按钮,您就应该切换布尔标志。然后当用户单击数字按钮时,检查此标志以确定正在使用哪个操作数。

结合这个标志,你也可以有一个像TextView currentTextView这样的变量,它被分配来引用当前使用的TextView。然后每当用户单击操作符按钮时,将此变量分配给另一个 TextView。这个策略会成功,因此您只需要 OnClickListener 中的 if 语句用于操作员按钮。您不需要在数字按钮的 OnClickListener 中使用任何 if 语句。

p.s。请注意,每个数字按钮都已显示数字字符。您可以使用这个事实来删除点击侦听器中几乎所有的 if...else 链。

p.p.s。您应该考虑为每个按钮编写不同的 OnClickListener。使用前面提到的策略,您可以为所有数字按钮创建一个监听器,但我仍然建议为每个操作员按钮创建一个不同的监听器。

你可以这样做:

public class YourActivityName extends AppCompatActivity {


TextView operand1, operand2,result,tv;

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

    operand1 = (TextView) findViewById(R.id.textView);
    operand2 = (TextView) findViewById(R.id.textView2);

    result= (TextView) findViewById(R.id.textView3);
    tv=operand1;
}


public void sendMessage(View v) {
    if (v.getId() == R.id.button19 || v.getId() == R.id.button15 || v.getId() == R.id.button17 || v.getId() == R.id.button21 || v.getId() == R.id.button18) {
        tv=operand2;
    }

    if(v.getId()==R.id.button7){
        tv.setText(tv.getText()+"7");
    }

    if(v.getId()==R.id.button8){
        tv.setText(tv.getText()+"8");
    }

    if(v.getId()==R.id.button23){
        int op1=Integer.parseInt(operand1.getText().toString());
        int op2=Integer.parseInt(operand2.getText().toString());
        op2+=op1;
        result.setText(op2+"");
        tv=operand1;
        operand1.setText("");
        operand2.setText("");
    }

}

}

此代码仅用于在按下“=”按钮时添加内容以及仅从您需要的按钮“7”和“8”获取输入以及其他按钮和操作的功能..但它应该可以解决您的问题更改输入的文本视图...

你也可以通过标志来完成。正如@Code-Apprentice 所建议的...