Android组件的使用:使用Gallery切换GridView

本文详细介绍了如何在Android应用中使用Gallery与GridView联合显示布局和内容的实践过程,包括创建布局文件、实体类、适配器类以及Activity类的实现,并展示了运行效果。此外,还介绍了如何在Gallery中加入RadioButton组件并实现监听事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)、运行效果。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值