永发信息网

Android中如何在布局文件中为组件绑定点击事件?

答案:2  悬赏:70  手机版
解决时间 2021-03-17 01:05
Android中如何在布局文件中为组件绑定点击事件?
最佳答案
在Android中为组件绑定点击事件的方式可以分为四种,
1、 在xml布局文件中,定义onclick的方式

android:id="@+id/submitbutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:onClick="buttonClickHandle"
android:layout_alignParentTop="true"
android:text="提交" />
//第二步在对应的Activity中创建一个与onClick属性值相同的方法,并传入一个View参数,当Button被点击时就会回调这个方法。
public void buttonClickHandle(View view) {
Snackbar.make(coordinatorLayout, "你点击了Button", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
另外三种绑定点击事件的方式实际上就是通过组件调用setOnClickListener()的方法,下面我们就来看一下这个方法的源码。

public void setOnClickListener(@Nullable OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
getListenerInfo().mOnClickListener = l;
}

根据源码我们可以看到这个方法中需要一个OnClickListener的对象。下面我们就来看看这个OnClickListener对象是个什么东东。

public interface OnClickListener {

void onClick(View v);
}
根据源码我们可以看到实际上这个OnClickListener就是一个接口,这个接口中有一个onClick的抽象方法。所以我们在创建这个OnClickListener对象是还需要实现这个抽象方法。这个onClick的抽象方法实际上就是当我们点击按钮后会回调的方法。我们对于点击事件的响应处理就在这个方法中进行。
现在我们已经了解了设置点击事件的setOnClickListener方法,根据我们如何创建这个方法中的OnClickListener对象,我们设置点击事件的方式可以分为如下三种:
1、内部类的形式
a. package com.example.hsport.catalog;

import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

private CoordinatorLayout coordinatorLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinator);
// 获取button对象
Button button = (Button) findViewById(R.id.submitbutton);
//创建内部类的实例
MyListener myListener = new MyListener();
//设置button的点击事件,将实现OnClickListener接口的内部类实例传入到setOnClickListener方法中
button.setOnClickListener(myListener);
}

//创建一个内部类实现View.OnClickListener接口,并实现其onClick方法
private class MyListener implements View.OnClickListener {
@Override
public void onClick(View v) {
Snackbar.make(coordinatorLayout, "你点击了Button", Snackbar.LENGTH_LONG).setAction("Action", null).show();
}
}
}

2、 匿名内部类的方式
package com.example.hsport.catalog;

import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

private CoordinatorLayout coordinatorLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinator);
//获取Button对象
Button button = (Button) findViewById(R.id.submitbutton);
//以创建一个View.OnClickListener的匿名内部类,并实现它的onClick方法
button.setOnClickListener(new View.OnClickListener() {
//在onClick方法中我们就可以设置button的响应代码了
@Override
public void onClick(View v) {
Snackbar.make(coordinatorLayout, "你点击了Button",Snackbar.LENGTH_LONG).setAction("Action", null).show();
}
});
}

3、 让主类实现OnClickListener接口,然后再主类实现未实现的方法

package com.example.hsport.catalog;

import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private CoordinatorLayout coordinatorLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinator);
//获取Button对象
Button button = (Button) findViewById(R.id.submitbutton);
//因为我们让MainActivity实现了View.OnClickListener这个接口,所以setOnClickListener方法中的参数直接传入this即可。
button.setOnClickListener(this);
}

//因为MainActivity实现了View.OnClickListener接口,所以在MainActivity中还有要实现该接口中改的onClick方法来处理点击事件。
@Override
public void onClick(View v) {
Snackbar.make(coordinatorLayout, "你点击了Button",Snackbar.LENGTH_LONG).setAction("Action", null).show();
}
}
关于如何给组件绑定点击事件,是Android中的基础知识,如果你还想更加详细的了解,推荐你可以去一个叫做秒秒学的教程网站看看,夯实下基础。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
突然辞职,厂里不批准怎么办,我在广东揭阳打
激电测井中方位测量怎么保证测量数据可靠
磨颧骨的副作用有哪些?我想要磨骨,但是不知
剑灵洪门崛起关闭右下角提示后怎么开启
海拔4286东经97度38,北纬33度8分
夹克上尺码185/96A.190/100A代表什么意
中公教育除了公考培训,其他培训课程涉及到哪
一个女孩很喜欢刚试的鞋子,但又嫌贵不舍得买
已经19岁了,胸部还是那么小
山楂钓鱼一杯饵料放多少山渣酒合适
梁祖辉西医诊所地址有知道的么?有点事想过去
奔驰c级 c180l和c180l运动版什么区别
2016年农历九月初一早7时出生八字
祥云县吉祥花苑怎么样?好不好?值不值得买?
ellie goulding红不红
推荐资讯
身上潮热出汗气虚是阳虚吗
170身高买lv敞口的大包是买中号还是买大号合
FILTERiT4安装后在AI里怎么用
bigbang所有成员一共演过哪些电影?
对象是孤儿好吗
起诉离婚,是自己写起诉书还是请人写呢?
谁去过北京密云的古北水镇?好不好?
孤独的人最可爱对吗?
各位mc腐竹来,你们用的什么映射软件比较好流
启辰t70 1.6加97号油会不会有问题
巴克的介绍
金华农民工拖欠工资的问题该找哪个部门求助
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?