Androidstudio中listView視圖列表控件的使用小練習
————安德風
一、制作水果列表清單(帶圖標版)最終效果演示:
1、布局設計
①activity_main.xml源代碼
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" 6 tools:context=".MainActivity"> 7 <ListView 8 android:layout_width="match_parent" 9 android:layout_height="match_parent" 10 android:id="@+id/listview"></ListView> 11 </LinearLayout>
②fruit_item.xml水果清單布局源代碼
1 <LinearLayout 2 xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="wrap_content" 5 > 6 <ImageView 7 android:layout_width="wrap_content" 8 android:layout_height="wrap_content" 9 android:id="@+id/fruit_image"/> 10 <TextView 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content" 13 android:id="@+id/fruitname" 14 android:layout_gravity="center_vertical" 15 android:layout_marginLeft="10dp"/> 16 </LinearLayout>
2、功能實現:
①MainActivity.java源代碼
1 package com.example.lineview; 2 3 import androidx.appcompat.app.AppCompatActivity; 4 5 import android.os.Bundle; 6 import android.view.View; 7 import android.widget.AdapterView; 8 import android.widget.ArrayAdapter; 9 import android.widget.ListView; 10 import android.widget.Toast; 11 12 import java.util.ArrayList; 13 import java.util.List; 14 15 public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { 16 private List<fruit> fruitList = new ArrayList<>();//聲明水果列表清單 17 @Override 18 protected void onCreate(Bundle savedInstanceState) { 19 super.onCreate(savedInstanceState); 20 setContentView(R.layout.activity_main); 21 initFruits();// 初始化水果數據 22 23 FruitAdapter arrayAdapter = new FruitAdapter(MainActivity.this,R.layout.fruit_item,fruitList); 24 25 ListView listView = (ListView) findViewById(R.id.listview); 26 listView.setAdapter(arrayAdapter); 27 28 // //ArraryAdapter適配器,通過泛型來指定要適配的數據類型,然后在構造函數中把要適配的數據傳入。 29 // ArrayAdapter<String> arrayAdapter= new ArrayAdapter<String>( 30 // MainActivity.this, android.R.layout.simple_list_item_1,fruits); 31 // ListView listView = (ListView) findViewById(R.id.listview); 32 // listView.setAdapter(arrayAdapter); 33 listView.setOnItemClickListener(this); 34 35 } 36 37 38 //水果添加圖片以及文字設置 39 40 private void initFruits(){ 41 42 // fruit apple = new fruit("蘋果",R.drawable.apple); 43 // fruitList.add(apple); 44 // fruit banana = new fruit("香蕉",R.drawable.banana_pic); 45 // fruitList.add(banana); 46 // fruit orange = new fruit("橙子",R.drawable.orange_pic); 47 // fruitList.add(orange); 48 fruit watermelon = new fruit("西瓜",R.drawable.xigua); 49 fruitList.add(watermelon); 50 fruit taozi = new fruit("桃子",R.drawable.taozi); 51 fruitList.add(taozi); 52 fruit xiangjiao = new fruit("香蕉",R.drawable.banana); 53 fruitList.add(xiangjiao); 54 fruit apple = new fruit("蘋果",R.drawable.apple); 55 fruitList.add(apple); 56 fruit orange= new fruit("橙子",R.drawable.orange); 57 fruitList.add(orange); 58 fruit lizi= new fruit("梨子",R.drawable.lizi); 59 fruitList.add(lizi); 60 61 62 } 63 64 //實現點擊水果清單中任何一項水果出現響應的彈出框功能 65 @Override 66 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 67 fruit fruit = fruitList.get(position); 68 Toast.makeText(MainActivity.this,fruit.getName(),Toast.LENGTH_SHORT).show(); 69 } 70 }
②fruit.java 水果清單封裝聲明功能
1 package com.example.lineview; 2 3 public class fruit { 4 private String name; 5 private int imageId; 6 public fruit (String name,int imageId){ 7 this.name = name; 8 this.imageId = imageId; 9 } 10 public String getName() { 11 return name; 12 } 13 public int getImageId() { 14 return imageId; 15 } 16 }
③FruitAdapter水果適配器功能設置
1 package com.example.lineview; 2 3 import android.content.Context; 4 import android.view.LayoutInflater; 5 import android.view.View; 6 import android.view.ViewGroup; 7 import android.widget.ArrayAdapter; 8 import android.widget.ImageView; 9 import android.widget.TextView; 10 11 import com.example.lineview.R; 12 import com.example.lineview.fruit; 13 14 import java.util.List; 15 16 public class FruitAdapter extends ArrayAdapter<fruit> { 17 18 private int resourceId; 19 20 public FruitAdapter(Context context, int textViewResourceId, List<fruit> objects){ 21 super(context,textViewResourceId,objects); 22 resourceId = textViewResourceId; 23 24 } 25 26 27 @Override 28 public View getView(int position, View convertView, ViewGroup parent){ 29 fruit fruit = getItem(position); //獲取當前項的Fruit實例 30 View view= LayoutInflater.from(getContext()).inflate(resourceId,parent,false); 31 ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image); 32 TextView fruitName =(TextView) view.findViewById(R.id.fruitname); 33 fruitImage.setImageResource(fruit.getImageId()); 34 fruitName.setText(fruit.getName()); 35 return view; 36 } 37 }
二、制作水果列表清單(無圖標版)最終效果演示:
1、界面布局設計activity_main.xml源代碼
1 <?xml version="1.0" encoding="utf-8"?> 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".MainActivity"> 8 9 <ListView 10 android:id="@+id/listview" 11 android:layout_width="368dp" 12 android:layout_height="623dp" 13 app:layout_constraintBottom_toBottomOf="parent" 14 app:layout_constraintEnd_toEndOf="parent" 15 app:layout_constraintHorizontal_bias="0.609" 16 app:layout_constraintStart_toStartOf="parent" 17 app:layout_constraintTop_toTopOf="parent" 18 app:layout_constraintVertical_bias="0.496" /> 19 </androidx.constraintlayout.widget.ConstraintLayout>
2、功能實現MainActivity.java
1 package com.example.myapplication2; 2 3 import androidx.appcompat.app.AppCompatActivity; 4 5 import android.os.Bundle; 6 import android.view.View; 7 import android.widget.AdapterView; 8 import android.widget.ArrayAdapter; 9 import android.widget.ListView; 10 import android.widget.TextView; 11 import android.widget.Toast; 12 13 public class MainActivity extends AppCompatActivity { 14 private String[]fruits={ 15 "蘋果","黑莓","橙子","海棠果","公爵櫻桃","獼猴桃","西洋李子","無花果","哈密瓜","水蜜桃", 16 }; 17 @Override 18 protected void onCreate(Bundle savedInstanceState) { 19 super.onCreate(savedInstanceState); 20 setContentView(R.layout.activity_main); 21 //ArraryAdapter適配器,通過泛型來指定要適配的數據類型,然后在構造函數中把要適配的數據傳入 22 ArrayAdapter<String> arrayAdapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,fruits); 23 //Android中提供了很多適配器,這里使用的是ArrayAdapter,它可以通過泛型來指定要適配的數據類型,然后在構造函數中把要適配的數據傳入。 24 /** 25 * 因為數據都是字符串,所以ArrayAdapter的泛型指定為String。 26 * ArrayAdapter的構造函數傳入3個數據: 27 * 28 * 1是Context 傳入當前的上下文 29 * 2是ListView子項布局的ID 30 * 3是要適配的數據 31 *android.R.layout.simple_list_item_1作為ListView子項布局的ID,這時安卓內置的布局文件。里面只有一個TextView,可用於顯示一段文本。 32 * 33 * 最后調用ListView的setAdapter()方法將構建好的適配器對象傳遞進去。 34 * 35 * 36 */ 37 38 39 ListView listView=findViewById(R.id.listview);//尋找列表視圖id 40 listView.setAdapter(arrayAdapter);//列表視圖創建適配器(Adapter)=》數組中的數據無法直接傳遞給ListView,這時需要借助適配器(Adapter)來完成。 41 42 //列表視圖建立監聽器(OnItemClickListener) 43 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 44 @Override 45 public void onItemClick(AdapterView<?> parent, View view, int i, long id) { 46 //彈出框輸出兩種方式 47 //方法一:調用view參數實現彈出框輸出 48 Toast.makeText(MainActivity.this, ((TextView)view).getText(), Toast.LENGTH_SHORT).show(); 49 50 51 //方法二:通過switch多分支選擇數組實現彈出框輸出 52 // switch (i){ 53 // case 0: 54 // Toast.makeText(MainActivity.this, fruits[0], Toast.LENGTH_SHORT).show(); 55 // break; 56 // case 1: 57 // Toast.makeText(MainActivity.this, fruits[1], Toast.LENGTH_SHORT).show(); 58 // break; 59 // case 2: 60 // Toast.makeText(MainActivity.this, fruits[2], Toast.LENGTH_SHORT).show(); 61 // break; 62 // case 3: 63 // Toast.makeText(MainActivity.this, fruits[3], Toast.LENGTH_SHORT).show(); 64 // break; 65 // case 4: 66 // Toast.makeText(MainActivity.this, fruits[4], Toast.LENGTH_SHORT).show(); 67 // break; 68 // case 5: 69 // Toast.makeText(MainActivity.this, fruits[5], Toast.LENGTH_SHORT).show(); 70 // break; 71 // case 6: 72 // Toast.makeText(MainActivity.this, fruits[6], Toast.LENGTH_SHORT).show(); 73 // break; 74 // case 7: 75 // Toast.makeText(MainActivity.this, fruits[7], Toast.LENGTH_SHORT).show(); 76 // break; 77 // case 8: 78 // Toast.makeText(MainActivity.this, fruits[8], Toast.LENGTH_SHORT).show(); 79 // break; 80 // case 9: 81 // Toast.makeText(MainActivity.this, fruits[9], Toast.LENGTH_SHORT).show(); 82 // break; 83 // } 84 } 85 }); 86 87 88 89 90 91 92 } 93 }
三、制作水果列表清單Toast彈出框帶圖片版
1、最終效果演示:
2、功能實現MainActivity(布局設計跳過與前面的布局設計一樣不作過多的贅述)
1 package com.example.listview4; 2 3 import androidx.appcompat.app.AppCompatActivity; 4 5 import android.os.Bundle; 6 import android.view.View; 7 import android.widget.AdapterView; 8 import android.widget.ArrayAdapter; 9 import android.widget.ImageView; 10 import android.widget.LinearLayout; 11 import android.widget.ListView; 12 import android.widget.TextView; 13 import android.widget.Toast; 14 15 public class MainActivity extends AppCompatActivity { 16 private String[]fruits={ 17 "蘋果","黑莓","橙子","海棠果","公爵櫻桃","獼猴桃","西洋李子","無花果","哈密瓜","水蜜桃", 18 19 }; 20 private int[] imgs={ 21 R.drawable.apple,R.drawable.heimei,R.drawable.orange,R.drawable.htg,R.drawable.yingtao,R.drawable.mht, 22 R.drawable.xylz,R.drawable.whg,R.drawable.hmg,R.drawable.smt, 23 }; 24 @Override 25 protected void onCreate(Bundle savedInstanceState) { 26 super.onCreate(savedInstanceState); 27 setContentView(R.layout.activity_main); 28 //ArraryAdapter適配器,通過泛型來指定要適配的數據類型,然后在構造函數中把要適配的數據傳入 29 ArrayAdapter<String> arrayAdapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,fruits); 30 //Android中提供了很多適配器,這里使用的是ArrayAdapter,它可以通過泛型來指定要適配的數據類型,然后在構造函數中把要適配的數據傳入。 31 /** 32 * 因為數據都是字符串,所以ArrayAdapter的泛型指定為String。 33 * ArrayAdapter的構造函數傳入3個數據: 34 * 35 * 1是Context 傳入當前的上下文 36 * 2是ListView子項布局的ID 37 * 3是要適配的數據 38 *android.R.layout.simple_list_item_1作為ListView子項布局的ID,這時安卓內置的布局文件。里面只有一個TextView,可用於顯示一段文本。 39 * 40 * 最后調用ListView的setAdapter()方法將構建好的適配器對象傳遞進去。 41 * 42 * 43 */ 44 45 46 ListView listView=findViewById(R.id.listview);//尋找列表視圖id 47 listView.setAdapter(arrayAdapter);//列表視圖創建適配器(Adapter)=》數組中的數據無法直接傳遞給ListView,這時需要借助適配器(Adapter)來完成。 48 49 //列表視圖建立監聽器(OnItemClickListener) 50 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 51 @Override 52 public void onItemClick(AdapterView<?> parent, View view, int i, long id) { 53 //彈出框輸出兩種方式 54 //方法一:調用view參數實現彈出框輸出 55 Toast toast= Toast.makeText(MainActivity.this, ((TextView)view).getText(), Toast.LENGTH_SHORT); 56 57 ImageView imageView=new ImageView(MainActivity.this);//圖片控件實例化 58 imageView.setImageResource(imgs[i]);//通過數組的方式加載圖片 59 LinearLayout toastview= (LinearLayout) toast.getView();//通過線性布局方式彈出框輸出圖片 60 toastview.setOrientation(LinearLayout.VERTICAL);//圖片垂直輸出(線性布局格式) 61 toastview.addView(imageView);//導入圖片控件 62 63 toast.show();//彈出框展示 64 65 //方法二:通過switch多分支選擇數組實現彈出框輸出 66 // switch (i){ 67 // case 0: 68 // Toast.makeText(MainActivity.this, fruits[0], Toast.LENGTH_SHORT).show(); 69 // break; 70 // case 1: 71 // Toast.makeText(MainActivity.this, fruits[1], Toast.LENGTH_SHORT).show(); 72 // break; 73 // case 2: 74 // Toast.makeText(MainActivity.this, fruits[2], Toast.LENGTH_SHORT).show(); 75 // break; 76 // case 3: 77 // Toast.makeText(MainActivity.this, fruits[3], Toast.LENGTH_SHORT).show(); 78 // break; 79 // case 4: 80 // Toast.makeText(MainActivity.this, fruits[4], Toast.LENGTH_SHORT).show(); 81 // break; 82 // case 5: 83 // Toast.makeText(MainActivity.this, fruits[5], Toast.LENGTH_SHORT).show(); 84 // break; 85 // case 6: 86 // Toast.makeText(MainActivity.this, fruits[6], Toast.LENGTH_SHORT).show(); 87 // break; 88 // case 7: 89 // Toast.makeText(MainActivity.this, fruits[7], Toast.LENGTH_SHORT).show(); 90 // break; 91 // case 8: 92 // Toast.makeText(MainActivity.this, fruits[8], Toast.LENGTH_SHORT).show(); 93 // break; 94 // case 9: 95 // Toast.makeText(MainActivity.this, fruits[9], Toast.LENGTH_SHORT).show(); 96 // break; 97 // } 98 } 99 }); 100 101 102 103 104 105 106 } 107 }