我試圖讓我的應用程序與PM設計(MVC +演示模型),但我已經堅持如何巧妙地包裝模型類在演示模型類。現在,我寫了一個簡單的代碼,其中根據Model類的實例中的值來更改圖片和文本。Android演示文稿模型:如何在演示模型中包裝模型?
// Disclaimer:
// View and Controller are merged in this sample for clarity's sake.
枚舉
MVCEnum AnimalSpecies {
Dog, Cat, Rabbit, Bird,
}
M的+ RM
class Model extends Observable {
// in my actual code Model has 10+ member variables and most of them are Enum
protected AnimalSpecies species;
protected String name;
protected Object update;
public void setSpecies (AnimalSpecies species) {
this.species = species;
notifyUpdate(species);
}
public void setName (String s) {
this.name = s;
notifyUpdate(name);
}
public void notifyUpdate(Object o) {
this.update = o;
this.setChanged();
this.notifyObservers(update);
}
}
MVC + RM的RM
class PresentationModel extends Observable implements Observer {
@Override
public void update(Observable model, Object data) {
// Called when notified by Model
// No idea what to write... but what I want to do is,
// a) determine what text for View to display
// b) determine what pics for View to display,
// based on values of Model.
this.setChanged();
this.notifyObservers(update);
}
}
MVC的VC + RM
class View extends Activity implements Observer {
// This is View + Controller, so it'd implement some interfaces like onClickListener,
// and in events such as onClick(), values of Model class are changed,
// but for clarity's sake, I keep everything in onCreate() event.
TextView header;
TextView footer
ImageView imgview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
header = (TextView) findViewById(R.id.header);
footer = (TextView) findViewById(R.id.footer);
imgview = (ImageView) findViewById(R.id.imgview);
Model model = new Model();
PresentationModel pm = new PresentationModel();
model.addObserver(pm);
pm.addObserver(this);
model.setSpecies(AnimalSpecies.Cat);
model.setName("Max");
}
@Override
public void update(Observable pm, Object data) {
// Called when notified by PresentationModel
// *** varies based on parameters from PresentationModel
header.setText(***);
footer.setText(***);
imgview.setImageResource(R.drawable.***);
}
}
我的問題:如何編寫PresentationModel
類的public void update()
邏輯?我可以從NotifyObserver()
得到的只有一個Object
變量,甚至與嵌套switch
或if
... else
,我不能想出所有代碼...
如何將模型綁定到演示模型? RoboBinding將展示模型綁定到視圖AFAIK。因此對模型所做的更改會傳播到演示文稿模型。 – 2014-12-03 13:42:03