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

首頁 > 系統(tǒng) > Android > 正文

Android ListView實現(xiàn)圖文列表顯示

2019-10-21 21:26:40
字體:
供稿:網(wǎng)友

本文實例為大家分享了Android ListView實現(xiàn)圖文列表顯示的具體代碼,供大家參考,具體內(nèi)容如下

目標(biāo)效果:

  Android,ListView,圖文列表

Android,ListView,圖文列表

ListView如果內(nèi)容過多,可以滑動屏幕來顯示,并且點擊某一行可使用吐司方法彈出對應(yīng)的水果名字。

1.新建項目,新建entity實體類包,包中建存儲每行水果信息的Fruit類。

Fruit.java頁面:

package com.example.entity; public class Fruit { private int imageId;     //使用id鎖定水果圖片 private String imageName;   //對應(yīng)的水果名字 public Fruit(int imageId, String imageName) { super(); this.imageId = imageId; this.imageName = imageName; } public int getImageId() { return imageId; } public void setImageId(int imageId) { this.imageId = imageId; } public String getImageName() { return imageName; } public void setImageName(String imageName) { this.imageName = imageName; }}

2.在activity_main.xml頁面添加ListView控件,用于顯示所有的水果即水果名稱。

activity_main.xml頁面:

<RelativeLayout 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/lvFruits"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_alignParentLeft="true"    android:layout_alignParentTop="true" >  </ListView> </RelativeLayout>

3.一個ListView中有多行信息,每行信息可以看成一個LinearLayout子布局,子布局中有兩個控件ImageView和TextView,按照水平排列。

listview_item.xml頁面:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:orientation="horizontal" >   <ImageView    android:id="@+id/ivImage"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:src="@drawable/ic_launcher" />   <TextView    android:id="@+id/tvName"    android:layout_marginLeft="10dp"    android:layout_gravity="center_vertical"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="TextView" /> </LinearLayout>

4.新建adaptor包,包中建FruitAdaopter.java類,添加適配器,連接布局和數(shù)據(jù)。

FruitAdaopter.java頁面:

package com.example.adapter; import java.util.List; import com.example.entity.Fruit;import com.example.listview.R; import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.TextView; public class FruitAdaoper extends ArrayAdapter<Fruit> {  // 適配器,泛型表示想要適配的數(shù)據(jù)類型  private int resourceId;  public FruitAdaoper(Context context, int textViewResourceId,  List<Fruit> objects) {             // 第一個參數(shù)是上下文環(huán)境,第二個參數(shù)是每一項的子布局,第三個參數(shù)是數(shù)據(jù) super(context, textViewResourceId, objects); resourceId = textViewResourceId;          //獲取子布局 }  @Override     //getView方法在每個子項被滾動到屏幕內(nèi)的時候都會被調(diào)用,每次都將布局重新加載一邊 public View getView(int position, View convertView, ViewGroup parent) {//第一個參數(shù)表示位置,第二個參數(shù)表示緩存布局,第三個表示綁定的view對象 View view; ViewHolder viewHolder;         //實例ViewHolder,當(dāng)程序第一次運行,保存獲取到的控件,提高效率 if(convertView==null){   viewHolder=new ViewHolder();  view = LayoutInflater.from(getContext()).inflate(//convertView為空代表布局沒有被加載過,即getView方法沒有被調(diào)用過,需要創(chuàng)建   resourceId, null);     // 得到子布局,非固定的,和子布局id有關(guān)  viewHolder.ivImage = (ImageView) view.findViewById(R.id.ivImage);//獲取控件,只需要調(diào)用一遍,調(diào)用過后保存在ViewHolder中  viewHolder.tvName = (TextView) view.findViewById(R.id.tvName);  //獲取控件  view.setTag(viewHolder); }else{  view=convertView;      //convertView不為空代表布局被加載過,只需要將convertView的值取出即可  viewHolder=(ViewHolder) view.getTag(); }  Fruit fruit = getItem(position);//實例指定位置的水果  viewHolder.ivImage.setImageResource(fruit.getImageId());//獲得指定位置水果的id viewHolder.tvName.setText(fruit.getImageName());    //獲得指定位置水果的名字 return view;  }} class ViewHolder{   //當(dāng)布局加載過后,保存獲取到的控件信息。 ImageView ivImage; TextView tvName;}

5.在MainActivity.java頁面初始化數(shù)據(jù)信息,并添加點擊每一行的點擊事件。

MainActivity.java頁面:

package com.example.listview; import java.util.ArrayList;import java.util.List; import com.example.adapter.FruitAdaoper;import com.example.entity.Fruit; import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast; public class MainActivity extends Activity {  private ListView lvFruits; private List<Fruit> fruitList = new ArrayList<Fruit>(); //創(chuàng)建集合保存水果信息  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lvFruits = (ListView) findViewById(R.id.lvFruits);  //獲得子布局 getData(); FruitAdaoper fruitAdapter = new FruitAdaoper(this,  R.layout.listview_item, fruitList);     //關(guān)聯(lián)數(shù)據(jù)和子布局 lvFruits.setAdapter(fruitAdapter);          //綁定數(shù)據(jù)和適配器  lvFruits.setOnItemClickListener(new OnItemClickListener() { //點擊每一行的點擊事件   @Override  public void onItemClick(AdapterView<?> adapterView, View view, int position,   long id) {  Fruit fruit=fruitList.get(position);     //獲取點擊的那一行  Toast.makeText(MainActivity.this,fruit.getImageName(),Toast.LENGTH_LONG).show();//使用吐司輸出點擊那行水果的名字  } }); }  private void getData() { int[] imageIds = { R.drawable.apple_pic, R.drawable.banana_pic,  R.drawable.cherry_pic, R.drawable.grape_pic,  R.drawable.mango_pic, R.drawable.orange_pic,  R.drawable.pear_pic, R.drawable.pineapple_pic,  R.drawable.strawberry_pic, R.drawable.watermelon_pic }; String[] names = { "蘋果", "香蕉", "櫻桃", "葡萄", "芒果", "橘子", "梨", "菠蘿", "草莓",  "西瓜" }; for(int i=0;i<imageIds.length;i++){         //將數(shù)據(jù)添加到集合中  fruitList.add(new Fruit(imageIds[i],names[i])); //將圖片id和對應(yīng)的name存儲到一起 } }  @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }

6.運行就可以出現(xiàn)目標(biāo)效果了。

7.注意FruitAdaopter.java類中的getView方法在每個子項被滾動到屏幕內(nèi)的時候都會被調(diào)用,每次都將布局重新加載一邊,所以為了提高效率可以進(jìn)行判斷,如果程序運行過一次就將布局保存在參數(shù)convertView中。

8.同樣,getView中的獲取控件id如果每次運行都要執(zhí)行,會降低效率,所以也需要定義ViewHolder類存儲獲取的控件信息,當(dāng)?shù)谝淮芜\行時執(zhí)行findViewById()后,將所有的控件信息保存到實例的ViewHolder中,后邊每次進(jìn)行調(diào)用即可。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 门头沟区| 土默特左旗| 清徐县| 永清县| 富阳市| 曲阜市| 武宁县| 蚌埠市| 北安市| 河池市| 安溪县| 高台县| 文山县| 尼勒克县| 泰宁县| 武义县| 牟定县| 松原市| 巴塘县| 新营市| 绥江县| 沧州市| 治多县| 上犹县| 镇赉县| 曲水县| 绥滨县| 三台县| 望江县| 上林县| 平遥县| 霍山县| 东平县| 邵武市| 乳山市| 澎湖县| 突泉县| 邹平县| 中宁县| 农安县| 日照市|