public class MainActivity extends Activity {
//GridView(网格布局)中android:numColumns="3"给他设置了三列
// 如果不设,默认的是一列(效果就会和listView一样)
GridView gridView;
//Palace类,继承了BaseAdapter(基础适配器)
Palace palace;
// 定义一个name的字符串用来表示应用名称
String name[]={"家园卫士","安装包","游戏盒子",
"链接电脑","记事本","垃圾箱","流量管理","软件修复","系统设置"};
// 定义一个icon的数字int类型用来把图片的地址引用过来
int[] icon={R.drawable.widget01,R.drawable.widget02,R.drawable.widget03,
R.drawable.widget04,R.drawable.widget05,R.drawable.widget06,
R.drawable.widget07,R.drawable.widget08,R.drawable.widget09,};
//重写方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ")f"暗写
// 初始化对GridView的操作(findViewById是用来指定id的!)
gridView=(GridView)findViewById(R.id.gridview);
// new新建了一个Palace因为inflate要加载布局所以要穿一个Context上下文
palace = new Palace(this, name, icon);
// 设置适配器
gridView.setAdapter(palace);
}
}
主xml里写
<GridView
android:id="@+id/gridview"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:numColumns="3"
<!--
在listView定义属性android:numColumns没用
-->
>
</GridView>
package com.example.palace;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class Palace extends BaseAdapter {
String[] mname;//定义一个接受构造传入的应用名
int[] icon; //定义一个接受构造传入的图片ID数组
Context context;//接受上下文
//上面都是通过构造来传递
public Palace(Context context,String[] mname, int[] icon) {
super();
this.mname = mname;
this.icon = icon;
this.context=context;
}
//设置条目的总数(一般以集合的长度,因为集合长度可变)
@Override
public int getCount() {
// TODO Auto-generated method stub
return icon.length;
}
//返回指定下标对应的数据对象
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return icon[position];
}
//返回每个条目的ID
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
//返回指定下标所对应的Item的View对象
// position下标
// convertView可以复用的缓存Item视图对象, 前n+1个为null
// parent ViewGroup对象
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 优化
pag pbg =null;//else访问到同一个
if(convertView==null){//如果显示的条目等于空是我再给他赋值,
// 不然会一直赋值导致内存溢出
pbg =new pag();//新建一个存放数据的
//加载一个hen布局赋值到convertView,Item的视图对象
convertView=View.inflate(context, R.layout.hen, null);
// convertView.findViewById//必须明写
pbg.image=(ImageView) convertView.findViewById(R.id.image);
// hen里面的image和text
pbg.text=(TextView) convertView.findViewById(R.id.text);
// 有了布局再设置里面的控件.(pbg设置控件)
convertView.setTag(pbg);
}else{
//如果已经加载的显示的条目有值,
// 获取
pbg= (pag) convertView.getTag();
}
// 给控件赋值
pbg.image.setImageResource(icon[position]);
pbg.text.setText(mname[position]);
return convertView;
}
class pag{//数据包
ImageView image;
TextView text;
}
}
<?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/image"
android:layout_width="50dp"
android:layout_marginTop="5dp"
android:layout_gravity="center"
android:layout_height="50dp"
/>
<TextView
android:id="@+id/text"
android:textSize="20dp"
android:layout_marginTop="5dp"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
作者:往事烦多
链接:https://www.jianshu.com/p/d1eb411225be
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。