如何在 setText() 之后将文本附加到 TextView?

How to append text to a TextView after setText()?

这是我的计算器应用程序的 MainActivity,我试图在其中首先 setText() 然后附加到 TextView main

我的问题是 append() 确实有效,但它只在我调用 setText() 方法后追加一次。我希望它多次附加文本。

我该怎么做?

public class MainActivity extends Activity implements OnClickListener {

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

        TextView main = (TextView) findViewById(R.id.maintextView);
        main.setText("0.");

        Button btnSeven = (Button) findViewById(R.id.btnseven);
        btnSeven.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
       switch(view.getId()) {
           case R.id.btnseven:
               TextView main = (TextView) findViewById(R.id.maintextView);
               main.setText("");
               main.append("7");
               break;
           default :
               break;
        }
    }
}

问题是您重置了 TextView 上的文本:

main.setText("");

在执行附加操作之前。您的代码应该如下所示:

public class MainActivity extends Activity implements OnClickListener {

    private TextView mMain;

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

        mMain = (TextView) findViewById(R.id.maintextView);
        mMain.setText("0");

        Button btnSeven = (Button) findViewById(R.id.btnseven);
        btnSeven.setOnClickListener(this);
    } 

    @Override 
    public void onClick(View view) {
        String mainText = mMain.getText().toString();
        try {
            // By parsing the text as a number, you make sure you handle the cases where the user added input like "0." too, so you don't have to handle each and every case with Strings and with if-else statements.
            double actualNumber = Double.parseDouble(mainText);
            if (actualNumber == 0) {
                mMain.setText("");
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
            // Something went wrong while parsing. Usually happens because the EditText contains other characters the digits or "."
        }

        switch(view.getId()) {
            case R.id.btnseven:
                mMain.append("7");
                break; 
            default : 
                break; 
        } 
    } 
}