我的按钮“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" />
答案 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;
}
}
}