Gallery(画廊)与GridView(网格视图)联合使用
1、Gallery与GridView的联合使用
1.1、一个实例
Gallery是显示图片的工具,但是它也可以显示一个组件内容或者一个布局。GridView是网格视图,显示内容也可以使一个组件内容或者一个布局。
需求:在Gallery中显示GridView,GridView显示一个布局。
1)、建立一个GridView中每个Item要显示的内容,该内容是一个布局文件gridview_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="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/iv_showgvitemimg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" android:layout_gravity="center" android:layout_marginTop="5dp" android:layout_marginBottom="5dp"/> <TextView android:id="@+id/tv_showtvitemtxt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="文本描述" android:layout_marginTop="5dp" android:layout_marginBottom="5dp"/> </LinearLayout>
2)、建立一个Gallery的布局文件,gallery_layout.xml。该布局文件就显示GridView。
<?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="match_parent" android:orientation="vertical" > <Gallery android:id="@+id/g_showgitem" android:layout_width="wrap_content" android:layout_height="wrap_content" android:spacing="2dp"/> </LinearLayout>
3)、建立一个实体类GridViewContent,用于保存GridView中Item的数据。
package com.example.entity; public class GridViewContent { private String name;//存放GridView中Item项的名字 private int image;//存放GridView中Item项的图片 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getImage() { return image; } public void setImage(int image) { this.image = image; } }
4)、建立加载GridView中每个Item数据的GridViewAdapter类。
package com.example.adapter; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import com.example.entity.GridViewContent; import com.example.practice_weibo.R; public class GridViewAdapter extends BaseAdapter { private Context context;//存放传过来的上下文,Activity类 private int resource; private List<GridViewContent> list; private LayoutInflater inflater; public GridViewAdapter(Context context, int resource, List<GridViewContent> list) { this.context = context; this.resource = resource; this.list = list; inflater = LayoutInflater.from(context); } @Override public int getCount() { if (list != null) { return list.size(); } return 0; } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = inflater.inflate(resource, null); } ImageView iv1 = (ImageView) convertView.findViewById(R.id.iv_showgvitemimg); TextView tv1 = (TextView) convertView.findViewById(R.id.tv_showtvitemtxt); iv1.setImageResource(list.get(position % list.size()).getImage()); tv1.setText(list.get(position % list.size()).getName()); return convertView; } }
5)、建立加载GridView的Adapter类,GalleryAdapter
package com.example.adapter; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import com.example.entity.GridViewContent; import com.example.practice_weibo.R; public class GalleryAdapter extends BaseAdapter { private Context context; private int resource; private List<GridViewContent> list; public GalleryAdapter(Context context, int resource, List<GridViewContent> list) { this.context = context; this.resource = resource; this.list = list; } @Override public int getCount() { //实现分页,每页显示2条数据, if (list != null) { int page = 0; if (list.size() % 3 == 0) { page = list.size() / 2; } else { page = list.size() / 2 + 1; } return page; } return 0; } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int arg0) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { //截取list中的数据,实现分页显示,即要显示那页数据就截取相应的区间 int start = position * 2; int end = start + 2; if (end > list.size()) { end = list.size();//如果截取的长度超过list的大小,则等于list的大小 } List<GridViewContent> subList = list.subList(start, end); GridView gv = new GridView(context); gv.setNumColumns(3); GridViewAdapter adapter = new GridViewAdapter(context, R.layout.gridview_item_layout, subList); gv.setAdapter(adapter); return gv; } }
6)、Activity中实现加载GalleryAdapter类。
package com.example.practice_weibo; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.Gallery; import android.widget.GridView; import com.example.adapter.GalleryAdapter; import com.example.entity.GridViewContent; public class MainActivity extends Activity { private Gallery g_showgitem = null; private List<GridViewContent> list = new ArrayList<GridViewContent>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.gallery_layout); g_showgitem = (Gallery) super.findViewById(R.id.g_showgitem); GridViewContent gvc = new GridViewContent(); gvc.setImage(R.drawable.baozi1); gvc.setName("第一项"); list.add(gvc); GridViewContent gvc1 = new GridViewContent(); gvc1.setImage(R.drawable.baozi2); gvc1.setName("第二项"); list.add(gvc1); GridViewContent gvc2 = new GridViewContent(); gvc2.setImage(R.drawable.baozi3); gvc2.setName("第三项"); list.add(gvc2); GridViewContent gvc3 = new GridViewContent(); gvc3.setImage(R.drawable.baozi4); gvc3.setName("第四项"); list.add(gvc3); GalleryAdapter galleryAdapter = new GalleryAdapter(this,0, list); g_showgitem.setAdapter(galleryAdapter); g_showgitem.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); } }
7)、运行结果:
1.2、给Gallery加上RadioButton
1)、修改布局文件,加上RadioButton组件。<?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="match_parent" android:orientation="vertical" > <Gallery android:id="@+id/g_showgitem" android:layout_width="wrap_content" android:layout_height="wrap_content" android:spacing="2dp"/> <RadioGroup android:id="@+id/rg_showrgitem" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center"> <RadioButton android:id="@+id/rb_showrbitem1" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <RadioButton android:id="@+id/rb_showrbitem2" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </RadioGroup> </LinearLayout>
2)、修改Activity类,为各组件加上监听事件。
package com.example.practice_weibo; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.Gallery; import android.widget.RadioButton; import android.widget.RadioGroup; import com.example.adapter.GalleryAdapter; import com.example.entity.GridViewContent; public class MainActivity extends Activity { private Gallery g_showgitem = null; private RadioGroup rg_showrgitem = null; private RadioButton rb_showrbitem1 = null; private RadioButton rb_showrbitem2 = null; private List<GridViewContent> list = new ArrayList<GridViewContent>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.gallery_layout); g_showgitem = (Gallery) super.findViewById(R.id.g_showgitem); rg_showrgitem =(RadioGroup)super.findViewById(R.id.rg_showrgitem); rb_showrbitem1 =(RadioButton)super.findViewById(R.id.rb_showrbitem1); rb_showrbitem2 =(RadioButton)super.findViewById(R.id.rb_showrbitem2); GridViewContent gvc = new GridViewContent(); gvc.setImage(R.drawable.baozi1); gvc.setName("第一项"); list.add(gvc); GridViewContent gvc1 = new GridViewContent(); gvc1.setImage(R.drawable.baozi2); gvc1.setName("第二项"); list.add(gvc1); GridViewContent gvc2 = new GridViewContent(); gvc2.setImage(R.drawable.baozi3); gvc2.setName("第三项"); list.add(gvc2); GridViewContent gvc3 = new GridViewContent(); gvc3.setImage(R.drawable.baozi4); gvc3.setName("第四项"); list.add(gvc3); GalleryAdapter galleryAdapter = new GalleryAdapter(this,0, list); g_showgitem.setAdapter(galleryAdapter); g_showgitem.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) { switch (position) { case 0: rb_showrbitem1.setChecked(true); break; case 1: rb_showrbitem2.setChecked(true); break; default: break; } } @Override public void onNothingSelected(AdapterView<?> adapterView) { } }); rg_showrgitem.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.rb_showrbitem1: g_showgitem.setSelection(0); break; case R.id.rb_showrbitem2: g_showgitem.setSelection(1); break; default: break; } } }); } }
3)、运行效果。