在初級階段,我們常對listview的適配器都是在一個activity類中全部寫滿。當你接觸項目多了,你會發現大神都把各種適配器放一個包裏,要用直接傳如相關參數到適配器的構造方法設置ListView。今天做了個簡單的demo,對於菜鳥理解多態有幫助。在MainActivity中代碼如下
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView list = (ListView) findViewById(R.id.listView1);
MyAdapter my = new MyAdapter(5, MainActivity.this);
list.setAdapter(my);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
在MyAdapter類中繼承和代碼如下
public class MyAdapter extends BaseAdapter{
private LayoutInflater inflater;
private int i;
public MyAdapter(int i,Context context) {
this.i = i;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 10;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View inflate = inflater.inflate(R.layout.item, null);
return inflate;
}
}
在MainActivity中 MyAdapter my = new MyAdapter(5, MainActivity.this);就執行了MyAdapter中的構造方法,一般只會執行到MyAdapter的構造方法,但由於BaseAdapter的特殊性,它自動調用getcount()等方法。這樣就通過BaseAdapter適配器設置了ListView的相關設置。