Android移动开发之【通往安卓的神奇之旅】Senior VIew高级组件与onClickListener()再探索

1 setonClickListener()

setOnClickListener代表设置事件处理的监听器,this代表就是所在的类,implements OnClickListener就代表实现监听器的接口,而public void onClick(View v) 函数就代表事件的处理函数,就是你点击startButton 按钮就会进入到onClick函数里面 …

2 button的OnClickListener的三种实现方法

onclick事件的定义方法,分为三种,分别为在xml中进行指定方法;在Actitivy中new出一个OnClickListenner();实现OnClickListener接口三种方式。

代码分别如下:

  1. xml指定onclick事件,这种方式比较适用于指定的button,能使java代码相对简化一些:

xml文件中:

<Button android:text="Button03"
	android:id="@+id/Button03"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:onClick="Btn3OnClick">
</Button>
public void Btn3OnClick(View view){
	Intent intent = new Intent(mainActivity.this, fristActivity.class);
	intent.putExtra("data", "mainActivity");
	startActivity(intent);
}

红色部分指定响应的方法名!
Activity中定义方法:
2. 在onCreate方法中为button指定绑定操作,以下方法中,xml里如果同时指定了事件的执行方法,则优先执行xml中的内容。

protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.main);
	findViewById(R.id.Button03).setOnClickListener(onclick);
}
OnClickListener onclick = new OnClickListener(){
	@Override
	public void onClick(View v) {
		Intent intent = new Intent(mainActivity.this, fristActivity.class);
		intent.putExtra("data", "mainActivity");
		startActivity(intent);	
	}
};

3 实现OnClickListener接口,这种方式使用量比较多,能解决同一个activity中所有的onclick问题。

public class mainActivity extends Activity implements OnClickListener{
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		findViewById(R.id.Button02).setOnClickListener(this);
		findViewById(R.id.Button03).setOnClickListener(this);
	}
	public void onClick(View view) {
		switch (v.getId()) {
			case R.id.Button03:
				Intent intent = new Intent(mainActivity.this, fristActivity.class);
				intent.putExtra("data", "mainActivity");
				startActivity(intent);	
				break;			
			case R.id.Button02:
				Intent intent = new Intent(mainActivity.this, loginActivity.class);
				intent.putExtra("data", "mainActivity");
				startActivity(intent);	
				break;	
			default:
				break;
		}
	}
	……
}
关于Activity中继承OnclickListener的说明
    在为组件添加监听事件时,传统的方法是在组件后面加上.setOnclickListener(View.OnClickListener).
    但是这种方法很麻烦,因为每一个组件添加监听事件时都要写相同的代码,而且OnClick方法在下面重写,造成了代码的冗余。下面介绍一种优化代码的方法
    1、在布局文件中把所有组件都定义好,每个组件都要加入相应的id
    2、令Activity实现OnclickListener接口,并重写OnClick()方法
    说明:这里让Activity实现OnClickListener接口之后,再把所有组件添加OnClickListener方法的对象都变成this,这样所有组件监听的对象都是当前的这个Activity
    3、在OnCreate()方法之外单独写一个方法将所有的组件都获取到,如上面的initWidght()方法
    4、在OnClick方法里,根据不同组件的id值,来添加不同的实现,因为所有的组件都是继承自View的,所以通过View.getId可以获取组件的id值,然后在分支语句里添加监听事件里要执行的代码。这样的方法优化了代码,相当于将多个组件的监听事件的代码通过让Activity继承OnClickListener之后,通过判断不同组件的id值集合到一个OnClick事件里写了。

    5、因为所有组件都是View类的子类,所以在传统方法中,将组件获取之后在后面添加.setOnclickListener(View.OnClickListener).相当于调用了父类(View这个类)的OnClick方法,而通过让Activity继承OnclickListener方法之后,在Activity里重写onClick方法则可以将各个组件的监听事件的代码集合在一起
    6、具体的例子请看代码,代码中共添加了五个按钮的事件监听

MainActivity的代码:

package com.hcbosion.activityimplementsonclicklistener;

import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initWidght();//调用方法初始化各个组件
    }

    public void initWidght(){
     findViewById(R.id.Btn1).setOnClickListener(this);//注意:这里监听事件的对象一定要设置为this
     findViewById(R.id.Btn2).setOnClickListener(this);
     findViewById(R.id.btn3).setOnClickListener(this);
     findViewById(R.id.btn4).setOnClickListener(this);
    }
 @Override
 public void onClick(View v) {
  int ItemId = v.getId();//获取组件的id值
  switch (ItemId) {
  case R.id.Btn1:        //根据不同的id值,为不同的组件添加不同的监听事件的实现代码
   Toast.makeText(MainActivity.this, "你点击了Button1", Toast.LENGTH_SHORT).show();
   break;
  case R.id.Btn2:
   Toast.makeText(MainActivity.this, "你点击了Button2", Toast.LENGTH_SHORT).show();
   break;
  case R.id.btn3:
   Toast.makeText(MainActivity.this, "你点击了Button3", Toast.LENGTH_SHORT).show();
   break;
  case R.id.btn4:
   Toast.makeText(MainActivity.this, "你点击了Button4", Toast.LENGTH_SHORT).show();
  default:
   break;
  }

 }
}

布局文件的代码,这里在一个LinearLayout布局中添加了一个TextView组件和四个Button组件

<?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"
    android:layout_gravity="center_horizontal">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/textview1"
        android:id="@+id/textView1"
        android:layout_marginTop="20dip"/>
 <Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="Button1"
     android:textSize="20dip"
     android:id="@+id/Btn1"
     android:layout_marginTop="20dip"/>
 <Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:textSize="20dip"
     android:text="Button2"
     android:id="@+id/Btn2"
     android:layout_marginTop="20dip"/>
 <Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:textSize="20dip"
     android:text="Button3"
     android:id="@+id/btn3"
     android:layout_marginTop="20dip"/>
 <Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:textSize="20dip"
     android:text="Button4"
     android:id="@+id/btn4"
     android:layout_marginTop="20dip"/>
</LinearLayout>


3 VideoView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#C0C0C0"
    android:orientation="vertical">
    <VideoView
    android:if="@+id/viedo"
    android:layout_width="400dp"
    android:layout_height="400dp"
    />
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="start"
            android:id="@+id/start"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="tingzhi"
            android:id="@+id/stop"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="pause"
            android:id="@+id/zanting"
    </LinearLayout>
</LinearLayout>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
循环播放:
在这里插入图片描述

发布了877 篇原创文章 · 获赞 237 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/weixin_43838785/article/details/104798373