android 枚举控件,Java - android中的枚举类型(Enum)

枚举类型(enum)

今天在查看android 计算器源码的过程中发现,谷歌的程序员在定义计算器的工作状态时,使用的是一个枚举类型

private enum CalculatorState {

INPUT, EVALUATE, RESULT, ERROR

}

最初我对枚举类型的理解仅仅是一个表达选择内容的类型,因为可以使用private static final int ... = ...的形式代替,也就没有细看,今天系统的学习一下;

枚举类型简单的应用场景

在类的对象有限且固定的时候,可以使用枚举类,比如说:

private enum SexEnumTest {

MALE,FEMAL

}

/*

private static final int MALE = 1;

private static final int FEMALE = 2;

*/

private enum SeasonEnumTest {

SPRING,SUMMER,FALL,WINTER

}

/*

private static final int SPRING = 1;

private static final int SUMMER = 2;

private static final int FALL = 3;

private static final int WINTER = 4;

*/

比如说当前判断完小明是男生或者当前季节是春天时,我们可以对上述枚举类型中的值进行一个get方法,这样的定义快速有效并且简洁、可读性高

public enum SexEnum {

MALE("male"),FEMALE("female");

private final String strings;

SexEnum(String strings){

this.strings = strings;

}

public String getStrings(){

return this.strings;

}

}

public enum SeasonEnum {

SPRING("spring"),SUMMER("summer"),FALL("fall"),WINTER("winter");

private final String nowSeason;

SeasonEnum (String s){

this.nowSeason = s;

}

public String getNowSeason(){

return this.nowSeason;

}

}

public static void main(String[] args) {

SexEnum xiaoMing = SexEnum.MALE;

System.out.println(xiaoMing.getStrings());

SeasonEnum nowSeason = SeasonEnum.SPRING;

System.out.println(nowSeason.getNowSeason());

}

枚举类型的简单使用实例

下面我们模拟一个android中经常遇到的一个情况:

在主界面上有一个TextView,三个Button,初始情况TextView中显示的是"init状态",当用户点击Button时Toast会提示依次改变显示状态"red"“green”"blue"要求涉及到枚举类型,使用Button的点击事件去设置当前的显示状态.

界面布局文件的代码:

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity"

android:orientation="vertical">

android:id="@+id/showText"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="init"

android:textSize="80sp"

android:layout_gravity="center"

android:layout_marginTop="30dp"

android:textColor="@color/colorPrimaryDark" />

android:id="@+id/btnRed"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:textAllCaps="false"

android:text="Red"

android:textSize="30sp"

android:layout_margin="30dp"

android:onClick="changeState"/>

android:id="@+id/btnBlue"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:textAllCaps="false"

android:text="Blue"

android:textSize="30sp"

android:layout_marginLeft="30dp"

android:layout_marginRight="30dp"

android:onClick="changeState"/>

android:id="@+id/btnGreen"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:textAllCaps="false"

android:text="Green"

android:textSize="30sp"

android:layout_marginTop="30dp"

android:layout_marginLeft="30dp"

android:layout_marginRight="30dp"

android:onClick="changeState"/>

LinearLayout>

主函数部分的代码:

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

public colorState nowState;

public TextView showText;

public Button btnRed;

public Button btnGreen;

public Button btnBlue;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

bind();

init();

}

public void changeState(View view) {

//点击事件

switch (view.getId()){

case R.id.btnBlue:

setNowState(colorState.BLUE);

Toast.makeText(this,"change state to blue", Toast.LENGTH_LONG).show();

break;

case R.id.btnGreen:

setNowState(colorState.GREEN);

Toast.makeText(this, "change state to green",Toast.LENGTH_LONG).show();

break;

case R.id.btnRed:

setNowState(colorState.RED);

Toast.makeText(this, "change state to red", Toast.LENGTH_LONG).show();

break;

default:

break;

}

}

private enum colorState{

//枚举类

INIT,RED,GREEN,BLUE

}

public void setNowState(colorState State) {

switch (State){

case RED:

nowState = colorState.RED;

showText.setText("Red");

break;

case BLUE:

nowState = colorState.BLUE;

showText.setText("Blue");

break;

case INIT:

nowState = colorState.INIT;

break;

case GREEN:

nowState = colorState.GREEN;

showText.setText("Green");

break;

default:

break;

}

}

public void bind(){

//查询控件

showText = findViewById(R.id.showText);

btnBlue = findViewById(R.id.btnBlue);

btnGreen = findViewById(R.id.btnGreen);

btnRed = findViewById(R.id.btnRed);

}

public void init(){

//初始化

setNowState(colorState.INIT);

showText.setText("Init");

}

}

包含抽象方法的枚举类型

掌握上述的例子,这部分就很容易理解了,我们在创建枚举类型时,除了可以设置枚举类型对应的值,也可以设置对应的方法,例如:

public enum meetEnum {

xiaofang {

public String meet(String place){

return "xiao ming meet xiao fang in " + place;

}

},

xiaohong {

public String meet(String place){

return "xiao ming meet xiao hong in " + place;

}

};

public abstract String meet(String place);

}

public class EnumTest {

public static void main(String[] args) {

System.out.println(meetEnum.xiaofang.meet("School"));

System.out.println(meetEnum.xiaohong.meet("Street"));

}

}

//控制台打印信息:

xiao ming meet xiao fang in School

xiao ming meet xiao hong in Street

这里注意需要使用abstract关键字定义一个抽象方法,才可以在主函数中调用。定义枚举类型时不可以使用abstract关键字,因为枚举类型需要显示创建,所以定义每个枚举值时都必须为抽象方法提供实现!

实现接口的枚举类型

上述表面枚举类型是可以实现方法的,那么也就是说枚举类型可以实现接口方法。这里我也就不多说了,无非就是上述例子中的meet(String Place)函数成为了某个接口定义的方法.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值