安卓按钮点击事件

55

我有关于点击方法的问题。我希望当手机上的按钮被点击时,可以将布局视图从main.xml切换到xx.xml。

package my.project;

import android.app.Activity;
import android.os.Bundle;

import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ExperiencerlActivity extends Activity {
    /** Called when the activ`enter code here`ity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);      
        Button button = (Button) findViewById(R.id.button1);

        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                // TODO Auto-generated method stub
            }
        });
    }
}

这是我的按钮代码

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/linearLayout1"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="56dp"
    android:onClick="setLogin"
    android:text="Login" />

不要混淆点击事件! - Rudra Saraswat
9个回答

110

如果你在XML文件中的Button标签里像这样写:android:onClick="setLogin",那么

请按照以下方式操作:

<?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/button1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/btn"
    android:onClick="onClickBtn" />

</LinearLayout>

而在代码部分中:

public class StartUpActivity extends Activity 
{
    public void onCreate(Bundle savedInstanceState) 
    {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);    
    }

    public void onClickBtn(View v)
    {
        Toast.makeText(this, "Clicked on Button", Toast.LENGTH_LONG).show();
    } 
}

不需要所有这些:

 Button button = (Button) findViewById(R.id.button1);
 button.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
        // TODO Auto-generated method stub

    }
 });

检查一次;


15

您需要在布局XML和Java代码中都使用相同的方法名称

如果您使用android:onClick="setLogin",则需要创建一个具有相同名称setLogin的方法:

// Please be noted that you need to add the "View v" parameter
public void setLogin(View v) {

}

建议:
不要在XML中使用android:onClick标签将布局与代码混合在一起。相反,将点击方法移到您的类中,并使用OnClickListener方法。

Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
  public void onClick(View v) {
    // TODO Auto-generated method stub
  }
 });

只为布局而创建布局,不要做更多的事情。当您需要重构以支持多个屏幕时,这将节省您宝贵的时间。


7

方法 1:

public void onClick(View v) {
          Intent i = new Intent(currentActivity.this, SecondActivity.class);
         startActivty(i);
        }

方法二:

Button button = (Button) findViewById(R.id.mybutton);
 button.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
         Toast.makeText(this, "Button Clicked", Toast.LENGTH_LONG).show();

    }
 });

1

有两种解决方案:

(1) 不要在xml中使用onClick。

(2) 删除

button.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
            // TODO Auto-generated method stub
    }
});

and put

public void setLogin(View v) {
    // Your code here
}

1
请注意,您不能同时使用这两个解决方案! - Rudra Saraswat

1
这里是如何添加名为Add的按钮的示例代码。 你应该将变量声明为成员变量,成员变量的命名规范是以字母“m”开头。
在类上按Alt+Enter键以添加缺失的引用。
将以下内容添加到activity_main.xml中:
 <Button
        android:id="@+id/buttonAdd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ADD"
     />

将以下代码添加到您的MainActivity.java文件中:
public class MainActivity extends AppCompatActivity {

    Button mButtonAdd; 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButtonAdd = findViewById(R.id.buttonAdd);

        mButtonAdd.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // do something here
            }
        });
    }
}

1
请使用类似这样的代码:

   public void onClick(View v) {
            // TODO Auto-generated method stub
           startActivity(new Intent("com.droidnova.android.splashscreen.MyApp"));
        }

0

在您的按钮点击事件中使用布局填充器方法。它将把当前的.xml文件更改为目标.xml文件。 搜索布局填充器代码。


0

当按钮被按下时,知道你正在尝试执行哪些代码会很有帮助。在你的xml文件中,你已经将onClick属性设置为一个名为setLogin的方法。为了清晰起见,我建议删除这一行android:onClick="setLogin",并直接从你的onClick()方法内部调用该方法。

此外,你不能仅仅将显示设置为一个新的XML,你需要使用Intent启动一个新的活动,类似于以下方法:

 private void setLogin() {

 Intent i = new Intent(currentActivity.this, newActivity.class);
 startActivty(i);

 }

然后将新的布局设置为新的Activity。


0

这将为您进行排序

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

    Button but1=(Button)findViewById(R.id.button1);

    but1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent int1= new Intent(MainActivity.this,xxactivity.class);
            startActivity(int1);
        }
    });
}

你只需要将xxactivity修改为你的第二个活动的名称


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接