编写代码GridView网格布局用了BaseAdapter基础适配器
新建一个java自动生成xml
主java里面打:
package com.example.palace;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.GridView;
import android.widget.ListView;
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>
在新建的Palace里面打:
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;
}
}
hen.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/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>
效果图
把主xml文件改成
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lv_man"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!--
这是一个ListView条目布局用来加载
-->
主Java里面的GridView 属性改成Listview,
android:numColumns="3"的设置无效!
android:numColumns="3"是设置GridView 显示几列
获取所有手机应用(listView)
java代码:
package com.example.iitem;
import java.util.ArrayList;
import java.util.List;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private List<AppInfo> data;
private iem appadapter;
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=(ListView) findViewById(R.id.ListView);
data=getAllAppInfos();
appadapter = new iem(data, this);
listView.setAdapter(appadapter);
listView.setOnItemClickListener(new OnItemClickListener() {
//parent listView
//view 当前行的Item视图对象
//position 当前行的下标
@SuppressLint("ShowToast")
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String appname=data.get(position).getAppName();
Toast.makeText(MainActivity.this,appname,Toast.LENGTH_LONG);
}
});
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
data.remove(position);
// 更新列表
appadapter.notifyDataSetChanged();
return true;
}
});
}
/*
* 得到手机中所有应用信息的列表
* AppInfo(写一个Java类)
* Drawable icon 图片对象
* String appName 应用名称
* String packageName 包名
*/
protected List<AppInfo> getAllAppInfos() {
List<AppInfo> list = new ArrayList<AppInfo>();
// 得到应用的packgeManager
PackageManager packageManager = getPackageManager();
// 创建一个主界面的intent
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
// 得到包含应用信息的列表
List<ResolveInfo> ResolveInfos = packageManager.queryIntentActivities(
intent, 0);
// 遍历
for (ResolveInfo ri : ResolveInfos) {
// 得到包名
String packageName = ri.activityInfo.packageName;
// 得到图标
Drawable icon = ri.loadIcon(packageManager);
// 得到应用名称
String appName = ri.loadLabel(packageManager).toString();
// 封装应用信息对象
AppInfo appInfo = new AppInfo(icon, appName, packageName);
// 添加到list
list.add(appInfo);
}
return list;
}
}
适配器
package com.example.iitem;
import java.util.List;
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 iem extends BaseAdapter {//可以用BaseAdapter父类的方法
List<AppInfo> data;
Context context;
public iem(List<AppInfo> data,Context context){
this.data=data;
this.context=context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}
@Override
public AppInfo getItem(int position) {
// TODO Auto-generated method stub
return data.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder hoid=null;
if(convertView==null){
hoid=new ViewHolder();
convertView=View.inflate(context, R.layout.item, null);
hoid.imageView=(ImageView) convertView.findViewById(R.id.imageView1);
hoid.textview=(TextView) convertView.findViewById(R.id.editText1);
convertView.setTag(hoid);
}else{
hoid=(ViewHolder) convertView.getTag();
}
AppInfo appInfo = data.get(position);
hoid.imageView.setImageDrawable(appInfo.getIcon());
hoid.textview.setText(appInfo.getAppName());
return convertView;
}
class ViewHolder{
ImageView imageView;
TextView textview;
}
}
数据类
package com.example.iitem;
import android.graphics.drawable.Drawable;
public class AppInfo {
/*
* 得到手机中所有应用信息的列表
* AppInfo(写一个Java类)
* Drawable icon 图片对象
* String appName 应用名称
* String packageName 包名
*/
Drawable icon;
String appName;
String packageName;
public AppInfo() {//默认的有所以写不写都一样
super();
}
public AppInfo(Drawable icon, String appName, String packageName) {
super();
this.icon = icon;
this.appName = appName;
this.packageName = packageName;
}
public Drawable getIcon() {
return icon;
}
public void setIcon(Drawable icon) {
this.icon = icon;
}
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public String getPackageName() {
return packageName;
}
public void setPackageName(String packageName) {
this.packageName = packageName;
}
}