android-----ListView和GridView的用法

浅浅的花香味﹌ 2022-08-09 00:56 324阅读 0赞

ListView和GridView都是比较常用的控件,都是用来显示数据的。ListView主要用来显示列表型的数据(如播放列表),而GridView主要用来显示表格型的数据(如九宫格图)。

ListView和GridView的使用都需要用到Adapter,并且之间的用法也比较相似。

ListView的使用

activity_main.xml布局文件:

  1. <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. tools:context=".MainActivity" >
  10. <ListView
  11. android:id="@+id/listView1"
  12. android:layout_width="match_parent"
  13. android:layout_height="wrap_content"
  14. android:layout_centerHorizontal="true"
  15. android:layout_centerVertical="true" >
  16. </ListView>
  17. </RelativeLayout>

item.xml文件:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="horizontal" >
  6. <ImageView
  7. android:id="@+id/imageView1"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:src="@drawable/ic_launcher"/>
  11. <TextView
  12. android:id="@+id/textView1"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:text="TextView" />
  16. </LinearLayout>

MainActivity.java文件:

  1. package com.pegatron.listview;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import android.app.Activity;
  6. import android.os.Bundle;
  7. import android.view.Menu;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10. import android.widget.AdapterView;
  11. import android.widget.AdapterView.OnItemClickListener;
  12. import android.widget.ArrayAdapter;
  13. import android.widget.BaseAdapter;
  14. import android.widget.ListView;
  15. import android.widget.SimpleAdapter;
  16. import android.widget.TextView;
  17. import android.widget.Toast;
  18. public class MainActivity extends Activity {
  19. private ListView lv;
  20. private ArrayAdapter<String> adapter;
  21. private SimpleAdapter sa;
  22. private List<HashMap<String, String>> list;
  23. private HashMap<String, String> map;
  24. private String[] names;
  25. @Override
  26. protected void onCreate(Bundle savedInstanceState) {
  27. super.onCreate(savedInstanceState);
  28. setContentView(R.layout.activity_main);
  29. lv=(ListView) findViewById(R.id.listView1);
  30. /**
  31. * 配合arrayadapter的使用
  32. */
  33. /* names=new String[]{"mike1","liz1","sasa1","osean1","mike2","liz2","sasa2","osean2","mike3","liz3","sasa3","osean3"};
  34. adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, names);
  35. lv.setAdapter(adapter);*/
  36. list=new ArrayList<HashMap<String,String>>();
  37. for(int i=0;i<50;i++){
  38. map=new HashMap<String, String>();
  39. map.put("textView1", "hello"+i);
  40. list.add(map);
  41. };
  42. /**
  43. * 配合simpleadapter的使用
  44. */
  45. /* sa=new SimpleAdapter(this, list, R.layout.item, new String[]{"textView1"}, new int[]{R.id.textView1});
  46. lv.setAdapter(sa);*/
  47. /**
  48. * 自定义的adapter
  49. */
  50. lv.setAdapter(new MyAdapter());
  51. lv.setOnItemClickListener(new OnItemClickListener() {
  52. @Override
  53. public void onItemClick(AdapterView<?> parent, View view,
  54. int position, long id) {
  55. Toast.makeText(MainActivity.this, "您选择了:"+position, 1).show();
  56. }
  57. });
  58. }
  59. private class MyAdapter extends BaseAdapter{
  60. @Override
  61. public int getCount() {
  62. if(list!=null){
  63. return list.size();
  64. }else{
  65. return 0;
  66. }
  67. }
  68. @Override
  69. public Object getItem(int position) {
  70. return list.get(position);
  71. }
  72. @Override
  73. public long getItemId(int position) {
  74. return 0;
  75. }
  76. @Override
  77. public View getView(int position, View convertView, ViewGroup parent) {
  78. HashMap<String, String> listItem=list.get(position);
  79. View v=View.inflate(getApplicationContext(), R.layout.item, null);
  80. TextView tv=(TextView) v.findViewById(R.id.textView1);
  81. tv.setText(listItem.get("textView1"));
  82. return v;
  83. }
  84. }
  85. }

配合ArrayAdapter使用、配合SimpleAdapter使用、自定义的MyAdapter三种方式的运行效果图:

CenterCenter 1

Center 2

GridView的使用:

布局文件:

  1. <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. tools:context=".MainActivity" >
  10. <GridView
  11. android:id="@+id/gridView1"
  12. android:layout_width="match_parent"
  13. android:layout_height="wrap_content"
  14. android:layout_centerHorizontal="true"
  15. android:layout_centerVertical="true"
  16. android:numColumns="3" >
  17. </GridView>
  18. </RelativeLayout>

items.xml文件:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6. <ImageView
  7. android:id="@+id/imageView1"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:src="@drawable/ic_launcher" />
  11. <TextView
  12. android:id="@+id/textView1"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:text="TextView" />
  16. </LinearLayout>

MainActivity.java文件:

  1. package com.pega.gridview;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.zip.Inflater;
  5. import android.os.Bundle;
  6. import android.app.Activity;
  7. import android.view.LayoutInflater;
  8. import android.view.Menu;
  9. import android.view.View;
  10. import android.view.ViewGroup;
  11. import android.widget.AdapterView;
  12. import android.widget.AdapterView.OnItemClickListener;
  13. import android.widget.BaseAdapter;
  14. import android.widget.GridView;
  15. import android.widget.ImageView;
  16. import android.widget.TextView;
  17. import android.widget.Toast;
  18. public class MainActivity extends Activity {
  19. private GridView gv;
  20. private MyAdapter ma;
  21. private String[] picture=new String[]{
  22. "picture1","picture2","picture3",
  23. "picture4","picture5","picture6",
  24. "picture7","picture8","picture9",
  25. "picture10","picture11","picture12",
  26. "picture13","picture14","picture15"};
  27. private int[] images=new int[]{
  28. R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
  29. R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
  30. R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
  31. R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
  32. R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher
  33. };
  34. @Override
  35. protected void onCreate(Bundle savedInstanceState) {
  36. super.onCreate(savedInstanceState);
  37. setContentView(R.layout.activity_main);
  38. gv=(GridView) findViewById(R.id.gridView1);
  39. ma=new MyAdapter(picture,images,this);
  40. gv.setAdapter(ma);
  41. gv.setOnItemClickListener(new OnItemClickListener() {
  42. @Override
  43. public void onItemClick(AdapterView<?> parent, View view,
  44. int position, long id) {
  45. // TODO 自动生成的方法存根
  46. Toast.makeText(MainActivity.this, "picture"+(position+1), Toast.LENGTH_LONG).show();
  47. }
  48. });
  49. }
  50. class MyAdapter extends BaseAdapter{
  51. private List<Picture> lists;
  52. public MyAdapter(){
  53. }
  54. public MyAdapter(String[] picture, int[] images,
  55. MainActivity mainActivity) {
  56. lists=new ArrayList<MainActivity.Picture>();
  57. for(int i=0;i<images.length;i++){
  58. Picture pic=new Picture(images[i],picture[i]);
  59. lists.add(pic);
  60. }
  61. }
  62. @Override
  63. public int getCount() {
  64. return lists.size();
  65. }
  66. @Override
  67. public Object getItem(int position) {
  68. // TODO 自动生成的方法存根
  69. return lists.get(position);
  70. }
  71. @Override
  72. public long getItemId(int position) {
  73. // TODO 自动生成的方法存根
  74. return lists.get(position).getPid();
  75. }
  76. @Override
  77. public View getView(int position, View convertView, ViewGroup parent) {
  78. if(convertView==null){
  79. convertView=LayoutInflater.from(getApplicationContext()).inflate(R.layout.items, null);
  80. ImageView iv=(ImageView) convertView.findViewById(R.id.imageView1);
  81. TextView tv=(TextView) convertView.findViewById(R.id.textView1);
  82. iv.setImageResource(lists.get(position).getPid());
  83. tv.setText(lists.get(position).getPdesc());
  84. }
  85. return convertView;
  86. }
  87. }
  88. class Picture{
  89. private int pid;
  90. private String pdesc;
  91. public Picture() {
  92. }
  93. public Picture(int pid, String pdesc) {
  94. super();
  95. this.pid = pid;
  96. this.pdesc = pdesc;
  97. }
  98. public int getPid() {
  99. return pid;
  100. }
  101. public void setPid(int pid) {
  102. this.pid = pid;
  103. }
  104. public String getPdesc() {
  105. return pdesc;
  106. }
  107. public void setPdesc(String pdesc) {
  108. this.pdesc = pdesc;
  109. }
  110. }
  111. }

这里只是用了自定义的Adapter,运行的效果图:

Center 3

另外的两种Adapter的用法跟ListView的用法类似。

发表评论

表情:
评论列表 (有 0 条评论,324人围观)

还没有评论,来说两句吧...

相关阅读

    相关 c++>><<

    在C++中,">>"和"<<"运算符是输入和输出运算符,分别用于从输入流中读取数据和向输出流中写入数据。 ">>"运算符用于从输入流中读取数据,并将其存储到相应的变量中。例如