Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.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
Java button.setOnclickListener出现问题(此)_Java_Android_Xml - Fatal编程技术网

Java button.setOnclickListener出现问题(此)

Java button.setOnclickListener出现问题(此),java,android,xml,Java,Android,Xml,我开始学习android,我试图进行登录活动,但我的按钮由于任何原因都不起作用 我已经在我的类中实现了view.OnClickListener 以下是我的java代码: public class Login extends AppCompatActivity implements View.OnClickListener{ private Button btn_login, btn_reset; private EditText et_username, et_pwd;

我开始学习android,我试图进行登录活动,但我的按钮由于任何原因都不起作用

我已经在我的类中实现了view.OnClickListener

以下是我的java代码:

public class Login extends AppCompatActivity implements View.OnClickListener{

    private Button btn_login, btn_reset;
    private EditText et_username, et_pwd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        btn_login = (Button) findViewById(R.id.bt_login_login);
        btn_login.setOnClickListener(this);

        btn_reset = (Button) findViewById(R.id.bt_log_reset);
        btn_reset.setOnClickListener(this);

        et_username = (EditText) findViewById(R.id.et_log_username);
        et_pwd = (EditText) findViewById(R.id.et_log_password);

    }

    @Override
    public void onClick(View v) {

        Log.w("test","test");
        switch(v.getId()){
            case R.id.bt_login_login :
                DisplayData();
                break;

            case R.id.bt_log_reset :
                resetData();
                break;
        }
    }
我想知道这是否是因为我的按钮在这样的树中:

activity_login.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".Login">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/txt_username"/>

    <EditText
        android:id="@+id/et_log_username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/txt_login"/>

    <EditText
        android:id="@+id/et_log_password"
        android:layout_width="match_parent"
        android:inputType="textPassword"
        android:hint="@string/pwd"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_horizontal|center_vertical"
        >
        <Button
            android:id="@+id/bt_login_login"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/intro_login"/>


        <Button
            android:id="@+id/bt_log_reset"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/reset"/>

    </LinearLayout>

</LinearLayout>


Ps:我的英语可能不好,很抱歉给您带来不便

请确保您的活动
实现View.OnClickListener

其他一切似乎都很好。

确保您的活动
实现View.OnClickListener

其他一切似乎都很好。

你可以尝试另一种方法。使用setOnClickListener时,可以传递OnClickListener的匿名类实现

另一种方法是在xml中为每个按钮定义一个onClick属性,给它一个函数名。您必须在活动中有一个具有确切名称的函数,才能触发该函数(如果没有它们之间的正确连接,Android Studio将不允许项目编译)

首选匿名类实现,因为您将无法始终在xml中声明事件(例如使用片段时)

要在setOnclickListener中实现匿名类,请执行以下操作:

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           //stuff to do when the button was clicked goes here. 
        }
    });

你可以尝试另一种方法。使用setOnClickListener时,可以传递OnClickListener的匿名类实现

另一种方法是在xml中为每个按钮定义一个onClick属性,给它一个函数名。您必须在活动中有一个具有确切名称的函数,才能触发该函数(如果没有它们之间的正确连接,Android Studio将不允许项目编译)

首选匿名类实现,因为您将无法始终在xml中声明事件(例如使用片段时)

要在setOnclickListener中实现匿名类,请执行以下操作:

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           //stuff to do when the button was clicked goes here. 
        }
    });

为什么不使用匿名类来实现侦听器呢?只是好奇。我已经尝试过匿名类,但它没有改变任何东西。你在日志中看到“test”了吗?(因为您在
onClick()
中有这一行
Log.w(“test”、“test”);
)不,它不显示在日志中。这应该可以工作,我没有看到任何异常。不要担心xml文件中的树结构,这根本没有问题。我想知道您是否已经实现了任何其他在触摸事件到达按钮之前捕获触摸事件的方法?有没有理由不使用匿名类来实现侦听器?只是好奇。我已经尝试过匿名类,但它没有改变任何东西。你在日志中看到“test”了吗?(因为您在
onClick()
中有这一行
Log.w(“test”、“test”);
)不,它不显示在日志中。这应该可以工作,我没有看到任何异常。不要担心xml文件中的树结构,这根本没有问题。我想知道您是否实现了任何其他功能,在触摸事件到达按钮之前捕获它们?您的错误是认为活动/类是侦听器,为什么这是一个错误?看看Joe Matt的答案。这是一个设计错误,它可以是这种情况下的侦听器,但是如果我们添加更多的事件侦听器,活动会负责实现所有这些吗?使用匿名类是一个更好的设计解决方案这不是一个设计错误。这是处理点击事件的主要方式。如果我们要添加更多的事件侦听器,活动是否负责实现所有这些侦听器?如果设计师愿意的话,它会的。这是使用
switch()
。无论如何,您的答案并不能解决OP的问题。他想知道为什么似乎很好的
onClick()
没有被调用。如果你想谈谈OP在他的问题中提出的问题,那就是xml结构是否导致onClick不起作用,答案是否定的,我觉得这是一个不错的xml结构。我编辑了我的答案,以提供另一种解决方案。您的错误是认为活动/类是侦听器。为什么这是一个错误?看看Joe Matt的答案。这是一个设计错误,它可以是这种情况下的侦听器,但是如果我们添加更多的事件侦听器,活动会负责实现所有这些吗?使用匿名类是一个更好的设计解决方案这不是一个设计错误。这是处理点击事件的主要方式。如果我们要添加更多的事件侦听器,活动是否负责实现所有这些侦听器?如果设计师愿意的话,它会的。这是使用
switch()
。无论如何,您的答案并不能解决OP的问题。他想知道为什么似乎很好的
onClick()
没有被调用。如果你想谈谈OP在他的问题中提出的问题,那就是xml结构是否导致onClick不起作用,答案是否定的,我觉得这是一个不错的xml结构。我编辑了我的答案,以提供另一种解决方案。