您的位置:首页 > 其它

GridView之BaseAdapter的用法简单案例(二)【子元素item的高度暂时不知道控制】

2016-04-11 15:06 330 查看
一个简单的GridView来预览选择 Imageview来显示的案例

效果如下,有一个问题暂时没有解决就是GridView中 子元素item的高度控制暂时不知道 所以效果很差,这里只是简单的介绍用法。所以暂时不深究。



首先我们将上面需要的布局定义一个

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}" >

<ImageView
android:id="@+id/image"
android:layout_width="240dp"
android:layout_height="240dp"
android:layout_gravity="center"/>
<GridView android:id="@+id/grid01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:numColumns="4"
android:horizontalSpacing="1pt"
android:verticalSpacing="1pt"
android:gravity="center"></GridView>
</LinearLayout>


然后是代码实现部分,

package com.example.baseadapter03;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class MainActivity extends Activity {
//声明成员变量
private ImageView image;
private GridView grid01;
int [] imageIds = new int[]{
R.drawable.umeng_socialize_light_bar_bg_pad,
R.drawable.umeng_update_btn_check_on_focused_holo_light,
R.drawable.abc_list_pressed_holo_dark,
R.drawable.ic_banana_rank,
R.drawable.ic_bangumi_new,
};

//创建一个集合存放数据
private List<Map<String,Object>> getdata(){
List<Map<String,Object>> listitem = new ArrayList<Map<String,Object>>();
//循环将数据放入图片
for(int i = 0 ;i<imageIds.length;i++){
Map<String,Object> map = new HashMap<String,Object>();
map.put("imageIds", imageIds[i]);
listitem.add(map);
}
return listitem;
}
//创建一个ViewHolder,临时保存从getview中返回的view,方便下次调用
public final class ViewHolder{
public ImageView imageIds;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//findViewById找到布局中的控件
grid01 = (GridView)findViewById(R.id.grid01);
image = (ImageView)findViewById(R.id.image);
//为gridview创建一个适配器并将其绑定在上面
MyAdapter mAdapter = new MyAdapter(this,getdata());
grid01.setAdapter(mAdapter);
//为gridview创建一个点击监听器,当我们点击某张图片时,imageview控件能显示这张图片
grid01.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
image.setImageResource(imageIds[position]);
}
});

}
//创建一个一个适配器继承BaseAdapter,用于处理数据
class MyAdapter extends BaseAdapter{
private LayoutInflater mInflater;
private List<Map<String,Object>> getdata;
//利用构造器将需要用到的参数传入
public MyAdapter(Context context,List<Map<String,Object>> getdata){
this.mInflater = LayoutInflater.from(context);
this.getdata = getdata;
}
@Override
public int getCount() {
//返回值为数据  集  中的条目数量
return getdata.size();
}

@Override
public Object getItem(int position) {
//返回值为数据集中索引对应的数据内容,
return position;
}
@Override
public long getItemId(int position) {

return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder =null;
if (convertView == null ){
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.activity_main,null);
holder.imageIds = (ImageView)convertView.findViewById(R.id.image);
convertView.setTag(holder);
}else{
holder = (ViewHolder)convertView.getTag();
}
holder.imageIds.setBackgroundResource((Integer) getdata.get(position).get("imageIds"));
return convertView;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: