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 对象裡的内容呈现于屏幕画面上