Android编程:使用onClick调用具有不同输入的函数

时间:2012-12-15 00:03:00

标签: java android

我是Android编程新手,所以请原谅这个问题看起来很愚蠢。

我在Android中创建一个计算器,对于用户界面,我有很多按钮(大约20个,10个数字,以及各种操作)。现在有一个字符串表达式,一旦用户按下按钮" ="我就会计算出来。但是,如果他按下任何其他按钮,则输入会更新。说他按下" 1"然后输入= 1;然后他按2然后输入变为" 12"等等。 所以每当按下各种按钮时我都需要调用相同的功能,但功能的输入是不同的。 我可以通过制作n个不同的功能,每个按钮一个,但不是很可扩展。 那我怎么能去做呢?

当前的xml文件是:

<Button
    android:id="@+id/Button01"
    android:layout_width="70dp"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/Button03"
    android:layout_alignBottom="@+id/Button03"
    android:layout_toRightOf="@+id/Button03"
    android:onClick="UpdateExpression_/"
    android:text="/" />

<Button
    android:id="@+id/Button02"
    android:layout_width="70dp"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/Button01"
    android:layout_alignBottom="@+id/Button01"
    android:layout_toRightOf="@+id/Button01"
    android:onClick="UpdateExpression_X"
    android:text="x" />

我需要更新到android:onClick =&#34; UpdateExpression&#34;并提到这个函数调用的一些输入。

谢谢。

2 个答案:

答案 0 :(得分:1)

你需要一个集中的onClick方法,我们称之为updateExpression(View v)还有一个关于你的代码的注释:方法名称应该以小写字母开头,这是一个Java命名约定。

  android:onClick="updateExpression" 

现在实施:

public void updateExpression (View v)
{
  switch (v.getId())
  {
    case R.id.button1:
    //do stuff here
    break;
    case R.id.button2:
    //do other stuff here
    break;
  }
}

您需要v.getId()的原因是因为您正在检查按钮的ID,然后执行某些操作(如果是特定ID)。需要此逻辑,因为所有按钮都将实现相同的方法。

答案 1 :(得分:0)

以下是使用代码的实现....

在onClick功能中,将v.getId()与每个Android版面ID进行比较,例如R.id.button1 R.id.button2等...

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

    //Here are some buttons defined in the XML layout as button1, button2, etc...
    Button button1 = (Button)findViewById(R.id.button1);        
    button1.setOnClickListener(myListener);
    Button button2 = (Button)findViewById(R.id.button2);        
    button2.setOnClickListener(myListener);
    Button button3 = (Button)findViewById(R.id.button3);        
    button3.setOnClickListener(myListener);

}

//Create an anonymous implementation of OnClickListener
private OnClickListener myListener = new OnClickListener() {
    public void onClick(View v) {
      Log.d(logtag,"onClick() called");              
      Toast.makeText(MainActivity.this, "The " + v.getId() + " button was clicked.", Toast.LENGTH_SHORT).show();

    }
};