在Android上未调用onClick方法
我正在做最简单的onClick模型,无法启动onClick方法。我知道这很简单,我对安卓系统还是新手。感谢您的帮助在Android上未调用onClick方法,android,onclick,Android,Onclick,我正在做最简单的onClick模型,无法启动onClick方法。我知道这很简单,我对安卓系统还是新手。感谢您的帮助 package com.bordeloniphone.timeentry; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; impo
package com.bordeloniphone.timeentry;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class TimeEntryActivity extends Activity implements OnClickListener{
/** Called when the activity is first created. */
Button okButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
okButton = (Button) findViewById(R.id.btnOK);
okButton.setText(":)");
okButton.setOnClickListener(this);
//setContentView(okButton);
}
public void onClick(View v) {
Log.d("TEST", "TEST");
Toast.makeText(this, "TEST", Toast.LENGTH_SHORT).show();
}
}
以下是main.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btnOK"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="OK" />
</LinearLayout>
尝试以下方法,而不是将onClicklistener设置为此:
okButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Log.d("TEST", "TEST");
Toast.makeText(this, "TEST", Toast.LENGTH_SHORT).show();
}
});
您应该尝试清理您的项目,或者尝试重新启动Eclipse或您正在使用的任何其他编辑器,因为它是一个有效的代码,应该可以正常工作 更新: 另外,您应该检查您的Logcat,您是否得到了
Log.d(“TEST”、“TEST”)的输出代码>因为您的Toast似乎以错误的方式实现
Toast.makeText(this, "TEST", Toast.LENGTH_SHORT).show(); // wrong
Toast.makeText(Activity_name.this, "TEST", Toast.LENGTH_SHORT).show(); // correct
在监听器内部的Toast中使用this
,意味着您正在引用监听器,事实上不应该如此。您必须引用活动本身,以便更好地使用活动\u名称。此尝试使按钮可单击
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btnOK"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="OK"
android:clickable="true" />
在焦虑和咬牙切齿之后,我终于明白了。我不得不删除仿真器设备并添加一个新设备,现在它可以像champ一样工作了。我感谢大家的帮助。按钮iv\u StyleInspiration\u Back=(按钮)findViewById(R.id.iv\u StyleInspiration\u Back);
iv_StyleInspiration_Back.setOnClickListener(此)
每当您在活动中实现onclick时,都可以尝试这样做,您需要如上所述进行设置,以使其适用于所有控件,并且onclick应该如下所示
@Override
public void onClick(View pView) {
if (null != pView) {
switch (pView.getId()) {
case R.id.iv_StyleInspiration_Back:
//do what you want
break;
default:
break;
}
}
}
检查三个步骤:
按id正确查找按钮
将按钮链接到侦听器。(添加actionListener)
在实现actionListener类时,可以为此按钮指定一个条件
我把你的代码复制/粘贴到一个新项目中,它成功了。我得到了吐司和LogCat条目。什么使你认为它不起作用?你的代码对我来说很好..清理后检查并构建你的项目..是的,这段代码对我很有效。也许你可以试试:Toast.makeText(TimeEntryActivity.this,“TEST”,Toast.LENGTH\u SHORT.show();检查我的最新答案。我从来没有说它不是。如果你同意他的方法是有效的,那么你的答案对他的问题有什么帮助?因为他说他是Android新手,我认为指出建立onClickListener的普遍接受的解决方案是有帮助的。我不同意这种方法是普遍接受的解决方案。这样做完全消除了可重用性,并且一旦有了多个不同的侦听器,就会极大地影响代码的大小。虽然我已经看到了很多,我觉得这是一个简单的出路。我更喜欢实现一个onClickLister,对所有视图使用同一个侦听器,然后对视图id进行切换,以了解要执行的操作。这是一种更干净的方式,可以让你的所有行为都集中在一个地方。我同意这是一种普遍接受的方式。它更具可重用性(尝试使用一个大的switch语句在片段之间移动处理程序),代码就在它需要的地方,并且在绝大多数情况下只是调用一个helper方法来执行任何重载。所以,如果有人在物理设备上有这个问题,它可能会变得有趣。事实上,这就是我来这里的原因。我有一个点击处理程序没有被调用的例子(很多可以工作的处理程序之一)。清洁和安装没有帮助。我希望有更强有力的解决方案。也许我拿错了。。。