我可以将参数从布局 XML 传递到 MainActivity 中的方法吗?
Can I pass a parameter from a layout XML to a method in the MainActivity?
很抱歉,如果这是一个菜鸟问题,但我是 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)"
/>
并在主 activity 中使用该方法对该数字进行任何操作(我还没有决定到底要用它做什么,但这不是我的问题的一部分)。
所以澄清一下,在我的应用程序中,我有数字 0-9 的按钮,符号“+”、“-”、“*”、“/”、“。”和 "C"。与其为每个数字编写单独的方法,我认为让所有数字使用相同的方法会更有效,并简单地传入一个变量,以便它以相同的方式为它们工作。
我可以这样做还是必须以完全不同的方式去做?
不,您不能将参数传递给方法,但您可以为视图设置标签并在代码中检查它。
实现此目的的简单方法是为您的按钮设置标签:
<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.
}
您不能从 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"
/>
在 activity 中对数字执行此操作:
public void num_pressed(View view) {
int number = Integer.parseInt(((Button) view).getText().toString());
}
编辑:类似地,对于符号,只需跳过解析为整数,我建议对数字和符号使用两种不同的方法,因为(如您所说)在计算器中,这些键的工作方式会有很大不同。
按照以下代码获取按钮事件。
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;
}
}
您可以在单击按钮时调用方法。此外,您可以在 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
}
很抱歉,如果这是一个菜鸟问题,但我是 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)"
/>
并在主 activity 中使用该方法对该数字进行任何操作(我还没有决定到底要用它做什么,但这不是我的问题的一部分)。
所以澄清一下,在我的应用程序中,我有数字 0-9 的按钮,符号“+”、“-”、“*”、“/”、“。”和 "C"。与其为每个数字编写单独的方法,我认为让所有数字使用相同的方法会更有效,并简单地传入一个变量,以便它以相同的方式为它们工作。
我可以这样做还是必须以完全不同的方式去做?
不,您不能将参数传递给方法,但您可以为视图设置标签并在代码中检查它。 实现此目的的简单方法是为您的按钮设置标签:
<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.
}
您不能从 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"
/>
在 activity 中对数字执行此操作:
public void num_pressed(View view) {
int number = Integer.parseInt(((Button) view).getText().toString());
}
编辑:类似地,对于符号,只需跳过解析为整数,我建议对数字和符号使用两种不同的方法,因为(如您所说)在计算器中,这些键的工作方式会有很大不同。
按照以下代码获取按钮事件。
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;
}
}
您可以在单击按钮时调用方法。此外,您可以在 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
}