public class MainActivity extends Activity implements OnItemClickListener {
public static final int RELOAD_ID = Menu.FIRST;
public static final int EXIT_ID = Menu.FIRST + 1;
ListView lv;
ArrayAdapter<String> adapter;
DataModel dm;
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
dm = new DataModel();
lv = new ListView(this);
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, dm.loadData());
lv.setAdapter(adapter);
lv.setOnItemClickListener(this);
setContentView(lv);
}
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
setTitle("choice: " + String.valueOf(dm.getPrice(arg2)));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, RELOAD_ID, 0, "Reload");
MenuItem im = menu.findItem(RELOAD_ID);
im.setIcon(R.drawable.icon);
menu.add(0, EXIT_ID, 1, "Exit");
im = menu.findItem(EXIT_ID);
im.setIcon(R.drawable.icon);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case RELOAD_ID:
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, dm.loadData());
lv.setAdapter(adapter);
break;
case EXIT_ID:
finish();
break;
}
return super.onOptionsItemSelected(item);
}
}
2、DataModel.java代码:
public class DataModel {
private String[] data, xdata;
private double[] price;
private boolean k = true;
public DataModel() {
data = new String[3];
data[0] = "Item-1";
data[1] = "Item-2";
data[2] = "Item-3";
xdata = new String[3];
xdata[0] = "Prod-x";
xdata[1] = "Prod-y";
xdata[2] = "Prod-z";
price = new double[3];
price[0] = 305.5;
price[1] = 56.75;
price[2] = 100.25;
}
public String[] loadData() {
k = !k;
if (k)
return xdata;
else
return data;
}
public double getPrice(int i) {
return price[i];
}
}
详解:
1.此程序展现MVC(model-view-controller)的基本架构。
2. MainActivity是Activity 的子类,它扮演controller 的角色。
3. ListView 是View 的子类,它扮演view 的角色。
4. 但是欠缺一个model 角色,怎么办呢?
5. 于是,撰写一个DataModel 类,并使用语句:dm = new DataModel();來诞生一个DataModel 的物件。
6. 然后,语句:adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dm.loadData());这诞生一个ArrayAdapter 的对象,并呼叫dm.loadData()函数取得选单所需要的内容,存入此新对象(即adapter)里。
7. 语句: lv.setAdapter(adapter);其lv 对象就向adapter 对象取得选单内容。
8. 语句:lv.setOnItemClickListener(this);这设定ListView 选单事件的处理程序,又称为事件监听者。当使用者选取一个项目时,框架必须把事件准确地传递到适当的类,并呼叫
所指定的函数。其中的参数:this 就表示此按钮事件必须传递到MainActivity类的对象,至于由MainActivity类的哪一个函数來处理呢? 就是由OnItemClickListener 界面所规定的onItemClick ()函数來处理之。
9. 语句:setContentView(lv);将lv 对象裡的内容呈现于屏幕画面上