我可以将布局XML中的参数传递给MainActivity中的方法吗?

时间:2015-02-11 10:32:13

标签: java android xml methods parameter-passing

对不起,如果这是一个noob问题,但我是XML和Android的新手。

我在Android中制作一个基本的计算器,基本上我想写一个方法来处理所有数字按钮按下。我想将一个参数从XML传递到方法中,如此...

 <Button
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:text="@string/button_8"
        android:textSize="40dp"
        android:onClick="num_pressed(8)" 
 />

并且在主要活动中使用该方法对该数字做任何事情(我还没有确定它究竟与它有什么关系,但这不是我的问题的一部分)。

所以要澄清一下,在我的应用程序中,我有数字0-9的按钮,符号&#34; +&#34;,&#34; - &#34;,&#34; *&#34;, &#34; /&#34;,&#34;。&#34;和&#34; C&#34;。我没有为每个数字编写一个单独的方法,而是让所有数字都使用相同的方法更简单,只需传入一个变量,以便它们以相同的方式为它们工作。

我可以这样做,还是我必须以完全不同的方式解决这个问题?

4 个答案:

答案 0 :(得分:0)

不,您无法将参数传递给方法,但您可以为视图设置标记并在代码中进行检查。 实现此目的的简单方法是为Button设置标记:

 <Button
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:text="@string/button_8"
        android:textSize="40dp"
        android:onClick="num_pressed"
        android:tag="8"
 />

在你的代码中,你可以这样做:

public void num_pressed(View view) {
  String a = (String) view.getTag(); // here will be 8 for button.
}

答案 1 :(得分:0)

您无法从XML传递参数,但您可以这样做,

你有strings.xml:8你在layout.xml:

<Button
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:text="@string/button_8"
        android:textSize="40dp"
        android:onClick="num_pressed" 
 />

在活动中为数字执行此操作:

public void num_pressed(View view) {
    int number = Integer.parseInt(((Button) view).getText().toString());
}

编辑:类似地,对于符号只是跳过解析为整数,我建议有两种不同的数字和符号方法,因为(如你所知)在计算器中,这些键的工作方式会有所不同。

答案 2 :(得分:0)

按照以下代码获取按钮事件。

public void num_pressed(View view) {

        switch (view.getId()) {
        case R.id.button1:
            //perform operation
            break;

        case R.id.button2:
            //perform operation
            break;
        case R.id.button3:
            //perform operation
            break;
        case R.id.button4:
            //perform operation
            break;
        case R.id.button5:
            //perform operation
            break;
        case R.id.button6:
            //perform operation
            break;
        case R.id.button7:
            //perform operation
            break;
        case R.id.button8:
            //perform operation
            break;
        case R.id.button9:
            //perform operation
            break;
            case R.id.buttonplus:
                //perform operation
                break;
        default:
            break;
        }

        }

答案 3 :(得分:0)

单击按钮时可以调用方法。此外,您可以在xml中为视图(在您的情况下为按钮)分配标签。 (标签基本上是视图有记忆的方式。)

要清楚,请使用android:onClick="MethodName"设置要调用的方法。并使用android:tag="tagValue"为每个视图分配标记。可以使用方法中的view.getTag()检索标记。

示例代码:
XML:

<Button
    ...Other Parameters...
    android:id="@+id/Button2"
    android:tag="2"
    android:onClick="method1"/>
<Button
    ...Other Parameters...
    android:id="@+id/Button3"
    android:tag="3"
    android:onClick="method1"/>

Java:

public void method1(View v){
    String tagValue = (String) v.getTag();
    if(tagValue.equals("2")){
        // add relevant code here
    }
    else if(tagValue.equals("3")){
        // add relevant code here
    }
    //complete the ramaining code
}