Android新引入的RecyclerView用来代替ListView,但是RecyclerView处理点击和长按事件却没有ListView方便
创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的西湖网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
RecyclerView并没有onClickListener和onLongClickListener方法
这样我们就需要在Adapter中创建一个接口
同时在adapter中创建该接口属性
然后在adapter implements OnClickListener,View.OnLongClickListener,在方法onCreateViewHolder中,
在方法onBindViewHolder中,设置
特别注意:这里胡itemView即接受点击事件的view,并不需要在ViewHolder中显式地初始化,当ViewHolder实例化之后,itemView也就自动实例化了。
这样我们在adapter实现的onClick和onLongClick方法中,就可以
最后,在activity中实现接口OnRecyclerViewItemClickListener
即可实现点击事件
按钮监听的3种方式
使用setOnClickListener (View.OnClickListener l)方法
loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(ButtonActivity.this, "点击了登录按钮" , Toast.LENGTH_SHORT).show();
}
});
实现接口的方式
public class ButtonActivity extends Activity implements View.OnClickListener {
private Button loginBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.button_activity);
loginBtn = (Button) findViewById(R.id.login_btn);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.login_btn:
Toast.makeText(ButtonActivity.this, "点击了登录按钮" , Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
}
在布局文件中加使用android:onClick属性
//1、先在布局文件中声明android:onClick="clickLoginBtn"
Button
android:id="@+id/login_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登录"
android:onClick="clickLoginBtn"/
//2、然后在代码总实现该同名方法,注意方法的访问权限必须为public
public void clickLoginBtn(View view){
Toast.makeText(ButtonActivity.this, "点击了登录按钮" , Toast.LENGTH_SHORT).show();
}
事情很简单,一个返回按钮设置了点击事件,但是无论如何都触发不了。
布局也很简单,就是一个 LinearLayout 中,包含一个 TitleBar 和一个 RecyclerView:
首先排除了一些小白错误,确定了点击事件确实绑定上了,但是却无法点击。
在网上搜索时,看到有人说到一种情况,就是按钮被上面的控件覆盖了,导致点击事件没有传递过来。
但是,这个界面很简单啊,不可能存在被覆盖的情况吧?
虽然感觉问题不大,但是还是点开了 Layout Inspector 查看了实时布局。
不看不知道,一看吓一跳:
原来他是一个透明的 ActionBar?这也太坑了吧!
找到问题就好解决了,直接隐藏了系统的 ActionBar 即可。
第一种点击事件
在xml中设置onclick属性
android:onClick="myOnclick"
第二种;获取Button然后一个一个单独绑定点击事件
"
xmlns:tools=" "
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/btn_imgBtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="myOnclick"
android:text="imageButton"
/
android:id="@+id/btn_imgView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="myOnclick"
android:text="imageView"
/
public class MainActivity extends ActionBarActivity {
private Button btnImageBtn;
private Button btnImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnImageBtn = (Button) findViewById(R.id.btn_imgBtn);
btnImageView = (Button) findViewById(R.id.btn_imgView);
btnImageBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "点击ImageButton", Toast.LENGTH_SHORT).show();
}
});
btnImageView.setOnClickListener(new MyListener());
}
第三种:写一个类(MyListener)实现OnClickListener接口,然后Button在设置onclickListener的时候new一个MyListener
btnImageView.setOnClickListener(new MyListener());
class MyListener implements OnClickListener{
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_imgBtn:
Toast.makeText(MainActivity.this, "点击ImageButton", Toast.LENGTH_SHORT).show();
break;
case R.id.btn_imgView:
Toast.makeText(MainActivity.this, "点击imageView", Toast.LENGTH_SHORT).show();
break;
}
第四种:整个类(MianActivity)实现onclickListener的接口
跳转界面
Intent:意图,用于访问android中的组件
用Intent跳转界面(activity)
第一步:new一个Intent()
Intent intent1 = new Intent(MainActivity.this,ImageButtonActivity.class);
startActivity(intent1);
public void myOnclick(View view){
switch (view.getId()) {
case R.id.btn_imgBtn:
Intent intent1 = new Intent(MainActivity.this,ImageButtonActivity.class);
startActivity(intent1);
break;
case R.id.btn_imgView:
Intent intent2 = new Intent(MainActivity.this,ImageViewActivity.class);
startActivity(intent2);
break;
Intent intent = new Intent(当前的activity,跳转到的acticvity.class);
startActivity(intent);
3.ImageView
展示方式:scaleType:
4.ImageButton:
触摸事件:当控件或者屏幕呗触摸的时候,产生的反应
public boolean onTouchEvent(MotionEvent event) {
}
imageButton:现在已经呗button代替,用于展示图片的按钮。不能显示文字。
imageView
scaleType:图片展示的方式
fitStart:展示在控件的上方
fitCenter:展示在控件的中间
fitEnd;展示在控件的下方
fitXY:不按照比例拉伸
matrix:矩阵模式
matrix可以设置图片旋转,缩放。移动
获取图片的高度和宽度
int h = imgView.getDrawable().getIntrinsicHeight();
int w = imgView.getDrawable().getIntrinsicWidth();
Matrix m = new Matrix();
m.postRotate(45);
m.postRotate(45, w/2, h/2);
imgView.setImageMatrix(m);
移动事件:
按下:MotionEvent.ACTION_DOWN
抬起:MotionEvent.ACTION_UP
移动:MotionEvent.ACTION_MOVE
获取当前的移动事件,
event.getAction()
"
xmlns:tools=" "
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/img_01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/ss"
android:scaleType="fitXY"/
android:id="@+id/img_02"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/gl"
android:visibility="gone"
android:scaleType="fitXY"/
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/bird"
android:layout_gravity="center"
/
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="#ff0000"
android:gravity="center"
android:text="小鸟飞"/
public class MainActivity extends Activity {
private ImageView img01;
private ImageView img02;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
img01 = (ImageView) findViewById(R.id.img_01);
img02 = (ImageView) findViewById(R.id.img_02);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//System.out.println("被摸了");
if(event.getAction()==MotionEvent.ACTION_UP){
Log.v("TAG", "被抬起来");
if(img01.getVisibility()==View.VISIBLE){
img01.setVisibility(View.GONE);
img02.setVisibility(View.VISIBLE);
}else{
img01.setVisibility(View.VISIBLE);
img02.setVisibility(View.GONE);
}
}else if(event.getAction()==MotionEvent.ACTION_DOWN){
Log.v("TAG", "被按下了");
}else if(event.getAction()==MotionEvent.ACTION_MOVE){
Log.v("TAG", "移动了");
}
return super.onTouchEvent(event);
}