button.setOnclickListener(this)有问题

时间:2018-12-11 16:09:25

标签: 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;

    @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:我英语说得不好,不便之处,敬请谅解

2 个答案:

答案 0 :(得分:1)

确保您的活动implements View.OnClickListener 其他一切似乎都很好。

答案 1 :(得分:1)

您可以尝试其他方式。使用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. 
        }
    });