0

所以我一直在寻找 android 教程、帮助问题等。我不断遇到我难以理解的问题或教程。

这是我的问题:

  1. 当我在可视化设计器中创建项目时,将在 .xml 中创建一段代码。如何获取该项目的 ID 以便稍后在 .java 文件中使用它?

  2. 假设单击按钮时如何添加回调?


这是我到目前为止所拥有的:

.java

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.Button;

public class MainActivity extends Activity {

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public void Button_click_callback() // Where to add the callback in the .xml?
    {
        // How to get button ID and change the text of it? 
            //Knowing this will help me A LOT!
    }
}

.xml

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="79dp"
android:layout_marginTop="32dp"
android:text="Button" />
4

9 回答 9

4

当我在可视化设计器中创建项目时,将在 .xml 中创建一段代码。如何获取该项目的 ID 以便稍后在 .java 文件中使用它?

第 1 步:确保您在设计器中为小部件分配了一个 ID(在上面的 XML 中,您将看到它android:id="@+id/button1

第 2 步:在 Java 中,您可以通过findViewById(R.id.button1)在某个适当的时间调用(例如,从Activity,在您调用 之后的某个时间setContentView())来获取该小部件的 Java 对象。

假设单击按钮时如何添加回调?

通常,对此有一个 setter 方法,例如setOnClickListener()您可以调用Button您检索到的findViewById().

在活动托管的小部件上的单击事件的特定情况下,android:onClick您还可以在 XML 中拥有一个属性,该属性提供您的方法的名称,Activity当您单击小部件时将调用该方法,而不必使用二传手。

于 2012-09-27T21:16:47.920 回答
2
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button button1 = (Button)findViewById(R.id.button1);
    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Do something in response to button click
        }
    });
}

所有这些都在 Android 开发者网站上得到了广泛的记录。你应该在他们那里寻找这些基本的东西。

http://developer.android.com/guide/topics/ui/controls/button.html

于 2012-09-27T21:16:42.657 回答
1
  1. 您可以使用 findViewById 从 Java 中的 XML 获取视图 id,确保您应该在视图中声明 id,否则可能会导致导致应用程序强制关闭的异常
  2. 如果你想用 xml 而不是以编程方式回调,你可以在布局 XML 中的视图上声明 android:onClick 属性

例如,在您的情况下,您需要添加 android:onClick="Button_click_callback" 在您的

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="79dp"
android:layout_marginTop="32dp"
android:text="Button" 
android:onClick="Button_click_callback"/>

然后你可以使用 Button_click_callback 方法在你的活动中回调

public void Button_click_callback()
{
}

如果您想使用 java 以编程方式回调,首先您可以使用 findViewById 获取视图,然后您可以将点击侦听器添加到该视图

于 2017-01-18T12:31:24.157 回答
0

您需要使用 onClickListener 并覆盖 onClick 方法。

btn.setOnClickListener.(new View.OnClickListener(){

     @Override
      public void onClick(View v) {
        //TO DO
    }

});

OnClickListener 是一个接口。这就是您需要覆盖 OnClick 方法的原因。

于 2015-07-27T12:41:48.577 回答
0
//in oncreate method of activity 

//take button id like that
Button button1 = (Button)findViewById(R.id.button1);

//then implement on click listener for  performing action on button

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Do something in response to button click
    }
});
}

//you can also implements onclicklistener in activity.its interface; 

public class MainActivity extends Activity implements View.OnClickListener

//then generate method 
public void onClick(View view) {


}
于 2016-04-09T13:35:43.143 回答
0
public class MainActivity extends Activity {
    private Button button1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1 = findViewById(R.id.button1);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public void Button_click_callback() {
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Do something in response to button click
                Log.e("click", "-------------button click");
            }

        });
    }
}
于 2018-09-27T10:19:12.890 回答
0

这两个代码片段是相同的,只是以两种不同的方式实现。

代码实现

Button btn = (Button) findViewById(R.id.mybutton);

btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        myFancyMethod(v);
    }
});

// some more code

public void myFancyMethod(View v) {
    // does something very interesting
}

上面是一个OnClickListener. 这就是 XML 实现。

XML 实现

<?xml version="1.0" encoding="utf-8"?>
<!-- layout elements -->
<Button android:id="@+id/mybutton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Click me!"
    android:onClick="myFancyMethod" />
于 2018-09-27T10:23:24.207 回答
0

1) 首先查看您的 XML 文件。在代码中它显示 android:id="@+id/button1.

你可以用你自己的名字编辑它。你可以做同样的事情来改变它,尽管 GUI 出现在你的设计的右侧。

您可以使用findViewById(R.id.your id name) 获取您的 ID;功能。

例如:我的按钮 ID 是btn1。在我的代码中,我可以通过获取它的 ID 来使用该按钮,如下所示:

Button btn1=findViewById(R.id.btn1);

2)您可以在创建之前创建的Button后回调如下;

btn1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Create your code
    }
});
}
于 2019-03-16T10:59:52.083 回答
-1

对于回调 - 需要在调用设备中注册 android 组件。组件的 id 在 xmls 中必须是唯一的。使用唯一 id 可以动态更改组件或可以使用回调。

于 2015-05-12T05:20:39.983 回答