【问题标题】:How to use the variable of one method in another method in Java(android)如何在Java(android)中的另一种方法中使用一种方法的变量
【发布时间】:2014-03-06 06:20:16
【问题描述】:

我正在检索这样的 TextView 的值

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.calculation);
    TextView heading = (TextView) findViewById(R.id.paper_name);
    ......
}

我在同一个类中有另一个方法

@Override
public void onClick(View v) {   
    int BLACK_AND_WHITE_MULTIUPLIER = 4200;
    int COLOR_MULTIUPLIER = 6400;
    switch (v.getId()) {
        case R.id.btCalculate:
        int multiplier = rbColor.isChecked() ? COLOR_MULTIUPLIER : BLACK_AND_WHITE_MULTIUPLIER;
        int column = Integer.parseInt((String) spColumn.getSelectedItem());
        int inch = Integer.parseInt((String) spInch.getSelectedItem());
        tvAmount.setText((multiplier * column * inch) + "");
        break;
    }
}

我想根据我从 onCreate 方法获得的 heading 的值来设置 COLOR_MULTIUPLIERBLACK_AND_WHITE_MULTIUPLIER 的值。有可能吗?

【问题讨论】:

  • onCreate 方法之外声明您的 TextView heading。在onCreate 内部,您为其分配了一个值。现在您的onClick 方法可以访问变量heading
  • 你应该使用全局变量标题应该是全局的,而不是本地的。在类中声明 TextView 标题
  • 您的意思是获取 textview 的值并将其转换为“int”以便您可以将其设置为“MULTIUPLIERS”吗?
  • @Takendarkk :我有两个整数变量 LACK_AND_WHITE_MULTIUPLIER 和 COLOR 。我想根据标题更改这两个变量的值。
  • 现在这两个变量被声明、初始化,并且只能在 onClick 方法内部访问。也许像我的回答所说的那样让它们成为全局变量,你应该使用heading。这样,如果您进行任何更改,它们将在您退出 onClick 方法后可见。

标签: java android methods scope


【解决方案1】:

在班级级别声明您的TextView...

TextView heading;

protected void onCreate(Bundle savedInstanceState)
    {


        super.onCreate(savedInstanceState);
        setContentView(R.layout.calculation);

        heading = (TextView) findViewById(R.id.paper_name);
        heading.setText("something");

            ......

然后在onClick()方法中访问它,如下...

@Override
public void onClick(View v)
{   
     int BLACK_AND_WHITE_MULTIUPLIER = 4200;
     int COLOR_MULTIUPLIER = 6400;
    switch (v.getId())
    {
        case R.id.btCalculate:

            int multiplier = 0;

            if (heading.getText().toString.equals("something")) {

                multiplier = COLOR_MULTIUPLIER;

            } else {

                multiplier = BLACK_AND_WHITE_MULTIUPLIER;

            }

            //int multiplier = rbColor.isChecked() ? COLOR_MULTIUPLIER
            //        : BLACK_AND_WHITE_MULTIUPLIER;
            int column = Integer.parseInt((String) spColumn
                    .getSelectedItem());
            int inch = Integer.parseInt((String) spInch.getSelectedItem());
            tvAmount.setText((multiplier * column * inch) + "");
            break;
    }
}

【讨论】:

  • 谢谢它对我有很大帮助
【解决方案2】:

移动TextView heading;,使其成为类变量而不是局部变量,然后整个班级都可以访问它。

然后它可以在onCreate 中初始化并在onClick 中读取和/或更新

【讨论】:

    【解决方案3】:

    在 onCreate 方法之外(即在类级别)声明您的 TextView 标题。在 onCreate 内部为其分配一个值,现在在 onClick 方法中可以访问可变标题并获取它的值。

    【讨论】:

      【解决方案4】:

      就像我在comment 中所说,您只需要将heading 设为属于整个对象的变量,而不仅仅是onCreate 方法。您可以通过以下方式执行此操作。

      public class MyActivity extends Activity {
      
          TextView heading;  //Declared outside of onCreate
      
          protected void onCreate(Bundle savedInstanceState) {
              heading = (TextView) findViewById(R.id.paper_name); //Assigned inside of onCreate
          }
      }
      

      然后该变量可以在您的onClick 中访问

      public void onClick(View v) {
          heading.getText(); //Or whatever you need to use it for
      }
      

      【讨论】:

        猜你喜欢
        • 2012-03-10
        • 1970-01-01
        • 2014-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-25
        • 1970-01-01
        • 2020-06-18
        相关资源
        最近更新 更多