按钮不可点击

时间:2013-05-14 14:53:15

标签: android android-layout android-button

我的按钮“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" />

2 个答案:

答案 0 :(得分:1)

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

public class ActivityName extends Activity implements OnClickListener
{

然后override onClick()

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

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

每个Button的xml中的

声明一个函数

<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,只接受View param,并且与您在xml

答案 1 :(得分:1)

你没有使用break语句。确保您的类实现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;
    }

}

用于显示吐司使用活动上下文。要知道为什么在下面的链接中通过commonsware检查答案

When to call activity context OR application context?

实施例

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;

    }       
}
}