我是一个初学者。应该说我只是学过java而已。然后就直接开始做安卓项目了,所以关于安卓的很多基础知识都不懂,直接百度或者是问别人。但是这样就很容易出现很多超级简单的问题。
做这个的时候就出现了一个简单问题,找了很久才发现。
报的错误是空指针,显示是gridview.setAdapter(saImageItems);这一行代码出错。在百度上搜了很久,都是说saImageItems这个数据的原因,当时我也以为是他为空,第二天才想起来gridview也有可能有问题,刚开始一直没想通的是saImageItems这个值明明用日志打印了大小,怎么可能没值呢。都没往那想。总以为是创建saImageItems的时候出了问题,对于安卓又什么都不懂。又怕是露了什么操作,总以为创建的这个代码肯定出问题了。因为这么长:
SimpleAdapter saImageItems=new SimpleAdapter(this, lstImageItem, R.layout.gridview_layout, new String[]{"ItemImage","ItemText"},new int[]{R.id.item_image,R.id.item_text});可是明明每一个都是按要求来的。
具体实现:
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" >
<GridView
android:id="@+id/gridview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:columnWidth="90dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
</LinearLayout>
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" >
<!--
android:layout_centerHorizontal="true" 将控件置于水平方向的中心位置
-->
<ImageView
android:id="@+id/item_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" >
</ImageView>
<TextView
android:id="@+id/item_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/item_image"
android:layout_centerHorizontal="true" >
</TextView>
</LinearLayout>
最后是控制层:
package com.example.ship;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.SimpleAdapter;
public class MainActivity extends Activity {
private GridView gridview;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
// <span style="color:#FF0000;">gridview=(GridView)this.findViewById(R.layout.main_layout);
</span><pre name="code" class="java">//当时的问题就在这,因为不太懂,在网上搜的实现,有些地方要改又没有复制,这里正好是手敲的所以没注意,最后想到了可能是这个的原因才看这里。
gridview=(GridView)this.findViewById(R.id.gridview); //生成主要菜单栏集合ArrayList<HashMap<String, Object>> lstImageItem=new ArrayList<HashMap<String,Object>>();//上图下字HashMap<String, Object> map1=new HashMap<String, Object>();map1.put("ItemImage",
R.drawable.camera);//添加图片资源的IDmap1.put("ItemText", "检疫登记");//ItemText lstImageItem.add(map1);HashMap<String, Object> map2=new HashMap<String, Object>();map2.put("ItemImage", R.drawable.camera);map2.put("ItemText", "上传");lstImageItem.add(map2);HashMap<String,
Object> map3=new HashMap<String, Object>();map3.put("ItemImage", R.drawable.camera);map3.put("ItemText", "下载基础数据");lstImageItem.add(map3); //生成适配器的ImageItem <====> 动态数组的元素,两者一一对应//对应的参数 (==,数据来源 ,对应的XML实现,动态数组与ImageItem对应的子项,ImageItem的XML文件里面的一个ImageView.两个TextView
ID SimpleAdapter saImageItems=new SimpleAdapter(this, lstImageItem, R.layout.gridview_layout, new String[]{"ItemImage","ItemText"},new int[]{R.id.item_image,R.id.item_text});//添加并且显示 Log.d(saImageItems.getCount()+"***",saImageItems.getCount()+"***");Log.d(gridview+"***",gridview+"***");gridview.setAdapter(saImageItems);//
添加消息处理 gridview.setOnItemClickListener(new ItemClickListener());}// 当AdapterView被单击(触摸屏或者键盘),则返回的Item单击事件 class ItemClickListener implements OnItemClickListener { public void onItemClick(AdapterView<?> arg0,// The AdapterView where the click happened View
arg1,// The view within the AdapterView that was clicked int arg2,// The position of the view in the adapter long arg3// The row id of the item that was clicked ) { // 在本例中arg2=arg3 @SuppressWarnings("unchecked") HashMap<String, Object> item = (HashMap<String,
Object>) arg0.getItemAtPosition(arg2); // 显示所选Item的ItemText setTitle((String) item.get("ItemText")); } } }
最后效果是这样的: