如何满足这种需求?一般性?继承?
Sensormanager聆听了许多传感器(GPS/温度/亮度)。
class Sensor{
public Sensor getInstance(){
}
public register(int id,Listener listener){
}
public unRegister(Listener listener){
}
public interface Listener{
void onDataChange(int id, int value);
}
}
我想使用不同的小部件显示不同的传感器。 这样:
abstract class View1 extends TextView{
abstract int getSensorId();
abstract void onValueChange(int value);
public void onAttachToWindow(){
Sensor.getInstance.register(id,listener);
}
public void onDetachFromWindow() {
Sensor.getInstance.unRegister(listener);
}
listener = new Listener(){
void onDataChange(int id, int value){
onValueChange(value);
}
}
}
abstract class View2 extends Button{
abstract int getSensorId();
abstract void onValueChange(int value);
public void onAttachToWindow(){
Sensor.getInstance.register(id,listener);
}
public void onDetachFromWindow() {
Sensor.getInstance.unRegister(listener);
}
listener = new Listener(){
void onDataChange(int id, int value){
onValueChange(value);
}
}
}
abstract class View3 extends ImageView{
abstract int getSensorId();
abstract void onValueChange(int value);
public void onAttachToWindow(){
Sensor.getInstance.register(id,listener);
}
public void onDetachFromWindow() {
Sensor.getInstance.unRegister(listener);
}
listener = new Listener(){
void onDataChange(int id, int value){
onValueChange(value);
}
}
}
abstract class View4 extends LinearLayout {
abstract int getSensorId();
abstract void onValueChange(int value);
public void onAttachToWindow(){
Sensor.getInstance.register(id,listener);
}
public void onDetachFromWindow() {
Sensor.getInstance.unRegister(listener);
}
listener = new Listener(){
void onDataChange(int id, int value){
onValueChange(value);
}
}
}
abstract class View5 extends RelativeLayout{
abstract int getSensorId();
abstract void onValueChange(int value);
public void onAttachToWindow(){
Sensor.getInstance.register(id,listener);
}
public void onDetachFromWindow() {
Sensor.getInstance.unRegister(listener);
}
listener = new Listener(){
void onDataChange(int id, int value){
onValueChange(value);
}
}
}
问题太多了。 我发现了一个
abstract AbsView<T extends View> extends T{
abstract int getSensorId();
abstract void onValueChange(int value);
public void onAttachToWindow(){
Sensor.getInstance.register(id,listener);
}
public void onDetachFromWindow() {
Sensor.getInstance.unRegister(listener);
}
listener = new Listener(){
void onDataChange(int id, int value){
onValueChange(value);
}
}
}
。
class View1 extends AbsView<TextView>{
int getSensorId(){
return gpsId;
}
void onValueChange(int value){
setText("xxxx");
}
}
class View2 extends AbsView<ImageView>{
int getSensorId(){
return gpsId;
}
void onValueChange(int value){
setImage(xxx);
}
}
class View3 extends AbsView<LinearLayout>{
int getSensorId(){
return gpsId;
}
void onValueChange(int value){
addView(xxx);
}
}
溶剂 那么,还有更多优雅的方法可以完成吗?
there are many sensors(gps/temperature/brightness) listened by SensorManager.
class Sensor{
public Sensor getInstance(){
}
public register(int id,Listener listener){
}
public unRegister(Listener listener){
}
public interface Listener{
void onDataChange(int id, int value);
}
}
I want to use different widgets to display different sensors.
like this:
abstract class View1 extends TextView{
abstract int getSensorId();
abstract void onValueChange(int value);
public void onAttachToWindow(){
Sensor.getInstance.register(id,listener);
}
public void onDetachFromWindow() {
Sensor.getInstance.unRegister(listener);
}
listener = new Listener(){
void onDataChange(int id, int value){
onValueChange(value);
}
}
}
abstract class View2 extends Button{
abstract int getSensorId();
abstract void onValueChange(int value);
public void onAttachToWindow(){
Sensor.getInstance.register(id,listener);
}
public void onDetachFromWindow() {
Sensor.getInstance.unRegister(listener);
}
listener = new Listener(){
void onDataChange(int id, int value){
onValueChange(value);
}
}
}
abstract class View3 extends ImageView{
abstract int getSensorId();
abstract void onValueChange(int value);
public void onAttachToWindow(){
Sensor.getInstance.register(id,listener);
}
public void onDetachFromWindow() {
Sensor.getInstance.unRegister(listener);
}
listener = new Listener(){
void onDataChange(int id, int value){
onValueChange(value);
}
}
}
abstract class View4 extends LinearLayout {
abstract int getSensorId();
abstract void onValueChange(int value);
public void onAttachToWindow(){
Sensor.getInstance.register(id,listener);
}
public void onDetachFromWindow() {
Sensor.getInstance.unRegister(listener);
}
listener = new Listener(){
void onDataChange(int id, int value){
onValueChange(value);
}
}
}
abstract class View5 extends RelativeLayout{
abstract int getSensorId();
abstract void onValueChange(int value);
public void onAttachToWindow(){
Sensor.getInstance.register(id,listener);
}
public void onDetachFromWindow() {
Sensor.getInstance.unRegister(listener);
}
listener = new Listener(){
void onDataChange(int id, int value){
onValueChange(value);
}
}
}
The problem is too many widget.
I figured out a solvent.(which failed to compile)
abstract AbsView<T extends View> extends T{
abstract int getSensorId();
abstract void onValueChange(int value);
public void onAttachToWindow(){
Sensor.getInstance.register(id,listener);
}
public void onDetachFromWindow() {
Sensor.getInstance.unRegister(listener);
}
listener = new Listener(){
void onDataChange(int id, int value){
onValueChange(value);
}
}
}
expecting i can use it like this
class View1 extends AbsView<TextView>{
int getSensorId(){
return gpsId;
}
void onValueChange(int value){
setText("xxxx");
}
}
class View2 extends AbsView<ImageView>{
int getSensorId(){
return gpsId;
}
void onValueChange(int value){
setImage(xxx);
}
}
class View3 extends AbsView<LinearLayout>{
int getSensorId(){
return gpsId;
}
void onValueChange(int value){
addView(xxx);
}
}
Them the compiler told me I can't do this.
So,is there any more elegant ways to accomplish it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论