-1

我有似乎不接受点击的按钮“saveStats”。

在模拟器上没有点击动画。

我试图清理并重新启动 Eclipse,但没有用。

我也有 CheckBox 小部件可以正常工作,只有按钮不起作用。这是我的代码:

感谢您的帮助:)

Button saveStats;

CheckBox ageCheck, heightCheck, weightCheck, fatCheck;


protected void onCreate(Bundle savedInstanceState) {

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

        saveStats = (Button) findViewById(R.id.saveStats);

        ageCheck = (CheckBox) findViewById(R.id.checkBoxAge);
        heightCheck = (CheckBox) findViewById(R.id.checkBoxHeight);
        weightCheck = (CheckBox) findViewById(R.id.checkBoxWeight);     
        fatCheck = (CheckBox) findViewById(R.id.checkBoxFat);

        saveStats.setOnClickListener(this);
        ageCheck.setOnClickListener(this);
        heightCheck.setOnClickListener(this);
        weightCheck.setOnClickListener(this);
        fatCheck.setOnClickListener(this);

}

public void onClick(View v) {
    // TODO Auto-generated method stub


    switch(v.getId()){

    case R.id.saveStats:
    {
         Toast.makeText(this, "working", Toast.LENGTH_LONG).show();
          return;
        }
    case R.id.checkBoxAge:
    {
        if(ageCheck.isChecked())
            Toast.makeText(this, "ok", Toast.LENGTH_LONG).show()
            return;
    }
////
////
////
////....

按钮 XML 代码:

 <Button
        android:id="@+id/saveStats"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1"
        android:text="save" />
4

2 回答 2

1

您必须以OnClickListener()这种方式实施

public class ActivityName extends Activity implements OnClickListener
{

那么override你的onClick()

@Override
public void onClick(View v)
{
    ...
}

只是一个注释。另一种方法是在您的 xml 中为每个单击函数声明相同的单击函数,Button然后在您的 java 代码中编写该函数。这可以防止您需要并在代码中implements OnClickListener声明Buttons和设置。onClickListener()您采用哪种方式取决于您最喜欢什么,但这只是另一种选择。这是一个小例子:

在 xml 中为每个Button声明一个函数

<Button
   android:id="@+id/btn1"
    ...
    android:onClick="functionName"/>
<Button
   android:id="@+id/btn2"
    ...
    android:onClick="functionName"/>

然后在你的java代码中:

public void functionName(View v)   
{
    ... switch on your id just like you would the other way
}

该方法只需要public接受 aView作为它的唯一方法param,并且与您在您的声明中声明的名称相同。xml

于 2013-05-14T15:00:38.707 回答
1

You have not use break statement. Make sure your class implements OnClickListener

@Override
public void onClick(View v) {

    switch(v.getId())
    {
    case R.id.saveStats :
        Toast.makeText(ActivityName.this, "Button clicked", Toast.LENGTH_LONG).show();
        break;
    case R.id.checkBoxAge :
                         //dosomething
        break;
    }

}

For displaying toast use activity context. To know why check the answer by commonsware in the below link

When to call activity context OR application context?

Example

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/textView1"
    android:layout_alignRight="@+id/textView1"
    android:layout_marginBottom="66dp"
    android:layout_marginRight="35dp"
    android:text="Button1" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/button1"
    android:text="Button2" />

<CheckBox
    android:id="@+id/checkBox1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/button2"
    android:layout_alignParentLeft="true"
    android:layout_marginBottom="18dp"
    android:text="CheckBox" />
 </RelativeLayout>

MainActivity.java

public class MainActivity extends Activity implements OnClickListener{

CheckBox cb ; 
Button b,b1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    b= (Button) findViewById(R.id.button1);
    b1= (Button) findViewById(R.id.button2);
    cb = (CheckBox) findViewById(R.id.checkBox1);
    cb.setOnClickListener(this);
    b.setOnClickListener(this);
    b1.setOnClickListener(this);

}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch(v.getId())
    {
     case R.id.button1 :
            Toast.makeText(MainActivity.this, "Button clicked1", Toast.LENGTH_LONG).show();
            break;
     case R.id.button2 :
          Toast.makeText(MainActivity.this, "Button clicked2", Toast.LENGTH_LONG).show();
            break;
     case R.id.checkBox1:
         if(cb.isChecked())
          Toast.makeText(MainActivity.this, "check box clicked", Toast.LENGTH_LONG).show();
            break;

    }       
}
}
于 2013-05-14T15:00:50.607 回答