android中gridview上图下字

文章详细记录了一名Java初学者在进行Android项目开发时遇到的一个简单但棘手的问题——空指针异常。通过分享从发现到解决的过程,包括错误代码分析、相关组件检查、日志打印利用等多个步骤,作者最终定位并解决了问题。文章旨在帮助初学者更好地理解和应对Android开发中可能遇到的基础问题。

我是一个初学者。应该说我只是学过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")); } } }

最后效果是这样的:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值