Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android上未调用onClick方法_Android_Onclick - Fatal编程技术网

在Android上未调用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

我正在做最简单的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;
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方法来执行任何重载。所以,如果有人在物理设备上有这个问题,它可能会变得有趣。事实上,这就是我来这里的原因。我有一个点击处理程序没有被调用的例子(很多可以工作的处理程序之一)。清洁和安装没有帮助。我希望有更强有力的解决方案。也许我拿错了。。。