有效地在 Java (android) 中声明 UI 元素

Declaring UI elements in Java (android) efficiently

我是否必须(在每个函数中)再次声明一个 UI 元素(例如(按钮)按钮)或者是否有更简单的方法来做到这一点。 (这不是最终代码,只是为了举例说明我的意思(有一个解密函数和一个简单的清除按钮)。这是我用 Java 编写的第一个程序,所以任何 hints/Improvements 非常欢迎!

public class 主Activity 扩展 Activity {

View.OnLongClickListener Longpress = new View.OnLongClickListener()
{

//A mess around with Toast - long pressing buttons will (eventually) give a description of their purpose          

 @Override
public boolean onLongClick(View v) {
    Button heldButton = (Button)v;
   String heldButtonText = heldButton.getText().toString();
    Toast.makeText(getApplicationContext(), heldButtonText, Toast.LENGTH_LONG).show();

    return true;
}
};



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

     Button buttonCompute = (Button)findViewById(R.id.btn_compute);
   Button buttonClear = (Button)findViewById(R.id.btn_clear);
    Button buttonSwitch = (Button)findViewById(R.id.btn_switch);
    buttonClear.setOnLongClickListener(Longpress);
    buttonCompute.setOnLongClickListener(Longpress);
    buttonSwitch.setOnLongClickListener(Longpress);
}

public void onButtonPress(View view)
{
    TextView output_textView = (TextView)findViewById(R.id.Output);
    TextView input_textView = (TextView)findViewById(R.id.Input);

    int pos;
    RadioButton encrypt = (RadioButton)findViewById(R.id.rdo_encrypt);
    RadioButton decrypt = (RadioButton)findViewById(R.id.rdo_decrypt);


    if(encrypt.isChecked()!= false || decrypt.isChecked()!= false  )
    {
        if (encrypt.isChecked()==true)
        {
            output_textView.setText(encryptme(input_textView.getText().toString()));
        }
        if (decrypt.isChecked()==true)
        {
            output_textView.setText(decryptme(input_textView.getText().toString()));
        }

    }
    else
    {
        new AlertDialog.Builder(this)
                .setTitle("Error!")
                .setMessage("Please check one radio button")
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                })
                .setIcon(android.R.drawable.ic_dialog_alert)
                .show();
    }
}

  private String encryptme(String inp)
{
    TextView password_textView= (TextView)findViewById(R.id.Password);
    int pos=0;

    String password = password_textView.getText().toString();
    char[] chararray = password.toCharArray();
    String  result = "";
    for(char c : inp.toCharArray())
    {

        if(pos>=password.length())
        {
            pos=0;
            char keychar = chararray[pos];
            result += (char)(c + keychar);
            pos+=1;
        }
        else
        {

            char keychar = chararray[pos];
            result += (char)(c + keychar);
            pos+=1;

        }
    }

    return result;
}

在 class 级别定义所有 数据类型和对象 然后您可以在 class 的任何方法中的任何地方使用它而无需再次初始化它。

例如,

public class MainActivity extends Activity{

    Button btn;

    onCreate(Bundle icreate){

        super.onCreate(icreate);
        setContentView(R.layout.main_layout);

        bnt = (Button) findViewById(R.id.buttonId);
        }

    public void anyMethod(){

        //here you can use btn without defining it again
        //suppose you are setting onClickListener then

        btn.setOnClickListener(new View...){
         ....
        }
    }

}