将 onclick 侦听器添加到预定义按钮?
Posted
技术标签:
【中文标题】将 onclick 侦听器添加到预定义按钮?【英文标题】:add onclick listener to predefined button? 【发布时间】:2011-07-20 16:31:29 【问题描述】:我的 xml 布局文件中有以下按钮...
<Button
android:layout_
android:id="@+id/button1"
android:layout_
android:text="@string/login"
android:layout_marginRight="10dip">
</Button>
我想以编程方式在其 Java 文件中添加一个 onclick()
侦听器。我该怎么做?
【问题讨论】:
【参考方案1】:你只需要这样的东西:
Button buttonOne = (Button) findViewById(R.id.button1);
buttonOne.setOnClickListener(new Button.OnClickListener()
public void onClick(View v)
//Do stuff here
);
【讨论】:
很高兴知道这个例外。如果是 NullPointerException,那是因为您的 Activity 布局中实际上没有 ID 为button1
的视图。如果是 ClassCastException,那是因为具有该 ID 的视图不是 Button。
耶!感谢您的回复,但我发现我没有使用按钮所在的布局。我的错,再次感谢:)
@RossHambrick,有没有办法添加监听器而不是覆盖它?
@Pacerier 不幸的是,没有。如果您真的需要,您必须在 Button 子类中添加该行为。【参考方案2】:
这个答案来自Five Ways to Wire Up an Event Listener。请阅读该博客文章以获得作者的更全面的解释。请参阅我的其他答案,了解这五种方式已改写为add multiple onClick listeners。
1。会员等级
public class main extends Activity
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//attach an instance of HandleClick to the Button
findViewById(R.id.button1).setOnClickListener(new HandleClick());
private class HandleClick implements OnClickListener
public void onClick(View arg0)
Button btn = (Button)arg0; //cast view to a button
// get a reference to the TextView
TextView tv = (TextView) findViewById(R.id.textview1);
// update the TextView text
tv.setText("You pressed " + btn.getText());
2。接口类型
public class main extends Activity
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//use the handleClick variable to attach the event listener
findViewById(R.id.button1).setOnClickListener(handleClick);
private OnClickListener handleClick = new OnClickListener()
public void onClick(View arg0)
Button btn = (Button)arg0;
TextView tv = (TextView) findViewById(R.id.textview1);
tv.setText("You pressed " + btn.getText());
;
3。匿名内部类
public class main extends Activity
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.button1).setOnClickListener(new OnClickListener()
public void onClick(View arg0)
Button btn = (Button)arg0;
TextView tv = (TextView) findViewById(R.id.textview1);
tv.setText("You pressed " + btn.getText());
);
4。在 Activity 中实现
public class main extends Activity implements OnClickListener
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.button1).setOnClickListener(this);
public void onClick(View arg0)
Button btn = (Button)arg0;
TextView tv = (TextView) findViewById(R.id.textview1);
tv.setText("You pressed " + btn.getText());
5。 OnClick 事件的视图布局中的属性
public class main extends Activity
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
public void HandleClick(View arg0)
Button btn = (Button)arg0;
TextView tv = (TextView) findViewById(R.id.textview1);
tv.setText("You pressed " + btn.getText());
xml:
<Button android:id="@+id/button1"
android:layout_
android:layout_
android:text="Button 1"
android:onClick="HandleClick"/>
【讨论】:
【参考方案3】:你可以试试这个。
public class myNewClass extends Activity implements OnClickListener
...................
...................
Button button = (Button)findViewById(R.id.button1);
button.setOnClickListener(this);
public void onClick(View v)
Intent i = new Intent();
Bundle extras = new Bundle();
// This will catch the button click
// Now do what you wanted to do as a
// result of the onClick
【讨论】:
如何在我的Activity
中实现OnClickListener
?
我编辑了我的答案。查看类定义,即声明 OnClickListener 实现的地方【参考方案4】:
您可以通过两种方式申请 onClicklistner: 1。在 onCreate 方法下2.外面的onCreate方法
如果我们将在 onCreate 方法下使用,那么我们将这样使用:-
protected void onCreate(@Nullable Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_graphics1);
textview1 = (TextView) findViewById(R.id.textview1);
circleBtn = (Button) findViewById(R.id.circleBtn);
// Click Listner Under on Create Method
circleBtn.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
);
如果您想使用 onCreate 方法,那么首先在 onCreate 方法中注册 onClickListner,如下所示:-
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_graphics1);
circleBtn = (Button) findViewById(R.id.circleBtn);
**// Register on click on button
circleBtn.setOnClickListener(new ClickMe());**
然后在 onCreate 方法之外实现 clicklistner,这样完整的代码将如下所示:-
public class ActiononBtn extends AppCompatActivity
private TextView textview1;
private Button circleBtn;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_graphics1);
textview1 = (TextView) findViewById(R.id.textview1);
circleBtn = (Button) findViewById(R.id.circleBtn);
// Register on click on button
circleBtn.setOnClickListener(new ClickMe());
// Close onCreate Method
private class ClickMe implements View.OnClickListener
public void onClick(View v)
//Close main Activity Class
【讨论】:
【参考方案5】:1.使用findViewById(R.id.button1).setOnClickListener(this);
2.和activty实现OnClickListener
【讨论】:
【参考方案6】:<Button
android:id="@+id/btnOk"
android:layout_
android:layout_
android:text="Ok"
android:layout_marginRight="50dp"
android:layout_marginLeft="50dp"/>
public class MainActivity extends AppCompatActivity
Button btnOk;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnOk = findViewById(R.id.btnOk);
btnOk.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Toast.makeText(MainActivity.this, "This button ok click.", Toast.LENGTH_SHORT).show();
);
【讨论】:
请不要在没有解释的情况下发布代码作为答案。试着解释你的代码做了什么以及它是如何解决问题的。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。以上是关于将 onclick 侦听器添加到预定义按钮?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将 onclick 侦听器添加到 QCheckBox?
Action Bar 的 Home 按钮的 onClick 监听器
按钮 onClick 事件侦听器在 Electron 应用程序中不起作用