国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

第一行代碼學習2(7)

2019-11-06 09:53:45
字體:
來源:轉載
供稿:網友

ListView學習

listview是一個重點內容,平時在開發的時候都只是初步了解,在網上粗略的看了一下就直接上手,還是在adapter中使用,了解的并不是很多,希望接下來的學習能使自己對ListView有一個更深刻的學習,達到熟悉使用。

簡單實現ListVIew 現在activity_main.xml文件中設置如下布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/ListView" android:layout_width="match_parent" android:layout_height="match_parent"> </ListVIew></LinearLayout>

在代碼中添加如下代碼:

PRivate String[] data = {"Apple", "Banana", "Orange", "Watermelon", "Pear", "Grape", "Pineapple", "Strawberry", "Cherry", "Manog"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, data);//android.R.layout.simple_list_item_1是android內置的布局文件,里面只有一個TextView,用于簡單的顯示一段文本 ListView listView = (ListView)findViewById(R.id.list_view); listView.setadapter(arrayAdapter);}

適配器用來設置內容,而listview是一個布局,要將內容顯示在布局上就需要布局調用setAdapter()方法將adapter傳進去。


自定義ListView


實現一個圖片對應文字的效果: 先定義一個實體類:

public class Fruit{ private String name; private int imageId; public Fruit(String name, int imageId){ this.name = name; this,imageId = imageId; } public String getName(){ return name; } public int getImageId(){ return imageId; }}

在layout目錄下新建fruit_item.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" > <ImageView android:id="@id/fruit_image" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/fruit_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="centent" android:layout_marginLeft="10d接下來創建自定義的適配器,繼承ArrayAdapter,指定Fruit類,新建FruitAdapter:

public class FruitAdapter extent ArrayAdapter<Fruit>{ private int resourceId; public FruitAdapter(Context context, int textViewResourceId, List<Fruit> Objects) super(context, textViewResourceId, objects); reourceId = textViewResourceId;}@Override public View getView(int position, View convertView, ViewGroup parent) { Fruit fruit = getItem(position); View view = LayoutInflater.from(getContext()).inFlate(resourceId, null); ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image); TextView fruitName = (TextView) view.findViewById(R.id.fruit_name); fruitImage.setImageResource(fruit.getImageId()); fruitName.setText(fruit.getName()); return view; }

FruitAdapter 重寫了父類的一組構造函數,用于將上下文、ListView 子項布局的 id 和數 據都傳遞進來。另外又重寫了 getView()方法,這個方法在每個子項被滾動到屏幕內的時候 會被調用。在 getView 方法中,首先通過 getItem()方法得到當前項的 Fruit 實例,然后使用 LayoutInflater 來為這個子項加載我們傳入的布局, 接著調用 View 的 findViewById()方法分別 獲取到 ImageView 和 TextView 的實例,并分別調用它們的 setImageResource()和 setText()方 法來設置顯示的圖片和文字,最后將布局返回,這樣我們自定義的適配器就完成了 修改 MainActivity 中的代碼:

private List<Fruit> fruitList = new ArrayList<Fruit>();protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initFruits(); // 初始化水果數據 FruitAdapter adapter = new FruitAdapter(MainActivity.this,R.layout.fruit_item, fruitList); ListView listView = (ListView) findViewById(R.id.list_view); listView.setAdapter(adapter);} private void initFruits() { Fruit apple = new Fruit("Apple", R.drawable.apple_pic); fruitList.add(apple); Fruit banana = new Fruit("Banana", R.drawable.banana_pic); fruitList.add(banana); Fruit orange = new Fruit("Orange", R.drawable.orange_pic); fruitList.add(orange); Fruit watermelon = new Fruit("Watermelon",R.drawable.watermelon_pic); fruitList.add(watermelon); Fruit pear = new Fruit("Pear", R.drawable.pear_pic); fruitList.add(pear); Fruit grape = new Fruit("Grape", R.drawable.grape_pic); fruitList.add(grape); Fruit pineapple = new Fruit("Pineapple", R.drawable.pineapple_pic); fruitList.add(pineapple); Fruit strawberry = new Fruit("Strawberry", R.drawable.strawberry_pic); fruitList.add(strawberry); Fruit cherry = new Fruit("Cherry", R.drawable.cherry_pic); fruitList.add(cherry); Fruit mango = new Fruit("Mango", R.drawable.mango_pic); fruitList.add(mango);}

對listView進行功能的優化: convertView是用于將之前加載好的布局進行緩存,以便以后重用,所以代碼可以修改為以下形式:

View view;ViewHolder viewHolder;if(convertView == null){ view = LayoutInflate.from(getContext()).inflate(resourceId, null); viewHolder = new viewHolder(); viewHolder.fruitImage = (ImageView)view.findViewById(R.id.fruit_view); viewHolder.fruitName = (TextView)view.findViewById(R.id.fruit_name); view.setTag(viewHolder);//將viewHolder存儲在View中}else{ view = convertView; viewHolder = (ViewHolder)view.getTag();//重新獲取ViewHolder}viewHolder.fruitImage.setImageResource(fruit.getImageId());viewHolder.fruitName.setText(fruit.getName());class ViewHolder{ ImageView fruitImage; TextView fruitName;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 马关县| 建德市| 扬中市| 彭泽县| 全南县| 乳山市| 长沙市| 龙泉市| 南京市| 罗定市| 和平县| 崇信县| 甘洛县| 陇西县| 凤阳县| 静乐县| 专栏| 大名县| 唐山市| 龙江县| 尚志市| 承德市| 揭西县| 肃宁县| 青州市| 靖州| 洛扎县| 桐庐县| 陆川县| 绥江县| 大同县| 龙泉市| 奉贤区| 滨州市| 开平市| 罗江县| 龙江县| 兖州市| 西乡县| 金门县| 贵阳市|