这阵子在写一个android小程序。主要是控制路由的。其实就是网页版的android实现方式。
大概就是:apk启动的时候,首页有三个按钮,三个按钮分别对应不同的设置。
分别是:1、ADSL设置;2、DHCP设置;3、静态IP设置。分别有一个按钮对应进入各自的设置界面
一开始,我直接用的类似
btn_adsl.setOnClickListener(new OnClickListener(){
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>public void onClick(View v){
<span style="white-space:pre"> </span>Intent intent = new Intent();
intent.setClass(Context, class);
startActivity(intent);
<span style="white-space:pre"> </span>}
}
这样的方式的话,三个按钮,就要写三个类似的实现代码。最近越看越不爽,就想改了它,把它做成根据各自按钮的事件,自动启动对应的activity,但使用的是同一段代码
一开始,在网上找了下。网上介绍了两种方法:
1、一种是通过设置tag的方式,大概如下
btn_adsl.setOnClickListener(this);
btn_adsl.setTag(1);
然后有个函数:
public void onClick(View v){switch((Integer)v.getTag()){
case 1:
/TODO
break;
case 2:
/TODO
break;
default:
break;
}
}
2、另一种是通过判断id来实现,大概如下:
btn_adsl.setOnClickListener(this);
public void onClick(View v){
switch(v.getId()){
case R.id.btn_adsl:
/TODO
break;
case R.id.btn_dhcp:
/TODO
break;
default:
break;
}
}
但上面两种方式来说,没有实际上的差别。因为还是用的不同的分支去实现。而我要的,就只是同一段代码,根据按钮设置监听事件时所带的参数,来启动各自的界面。
后面我写了一个类,大概如下:
class ActivityListener implements OnClickListener{
Activity act;
public ActivityListener(Activity act){
this.act = act;
}
public void onClick(View v){
Intent intent = new Intent();
intent.setClass(TabMenu.this, act.getClass());
startActivity(intent);
}
}
就是在new一个ActivityListener的时候,传递不同的Activity参数下去。
最终的调用方式如下:
btn_adsl.setOnClickListener(new ActivityListener(new ADSLSetting()));
btn_dhcp.setOnClickListener(new ActivityListener(new DHCPSetting()));
btn_staticip.setOnClickListener(new ActivityListener(new StaticIPSetting()));
其中
public class ADSLSetting extends Activity {
/TODO
}
语言组织的不好。大概的方式就差不多这样。