layout.xml

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<GridView
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3"
android:horizontalSpacing="2dp"
android:verticalSpacing="2dp"
></GridView> </RelativeLayout>

gridview_item.xml

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="100dp"
android:src="@drawable/ic_launcher"
/>
<ImageView
android:id="@+id/image_delete"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
android:src="@drawable/delete"
/> </RelativeLayout>

MyAdapter.java

package com.example.day09_gridview_listener;

import java.util.List;

import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.Toast; class MyAdapter extends BaseAdapter{
private List<Integer> dataList;
private Context context;
private boolean isShow = false; public MyAdapter(List<Integer> dataList, Context context) {
super();
this.dataList = dataList;
this.context = context;
} public boolean getisShow() {
return isShow;
} public void setisShow(boolean isShow) {
this.isShow = isShow;
//更新数据
notifyDataSetChanged();
} @Override
public int getCount() {
return dataList.size();
} @Override
public Object getItem(int position) {
return dataList.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = View.inflate(context, R.layout.gridview_item, null);
ImageView image = (ImageView) view.findViewById(R.id.image);
ImageView deleteImg = (ImageView) view.findViewById(R.id.image_delete);
//设置删除图标是否显示 可编辑?显示:消失
Log.i("MainActivity---------", getisShow()+""); deleteImg.setVisibility(isShow?View.VISIBLE:View.GONE);
image.setImageResource(dataList.get(position)); deleteImg.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
Toast.makeText(context, "点击了XX", 0).show();
dataList.remove(dataList.get(position));
notifyDataSetChanged();
}
}); return view;
} }

Main.java

package com.example.day09_gridview_listener;

import java.util.ArrayList;
import java.util.List; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;
/**
* 需求:gridView实现点击X按钮实现删除图片的功能
*
* 1.初始化控件
* 2.初始化数据
* 3.实现BaseAdapter中方法将数据填充
* 1.初始页面
* 2.设置长按监听事件
* 1.普通操作--不操作
* 2,编辑操作--长按显示x图标
* 1.点击x图标删除该图片,更新view
* 3.设置点击监听事件
* 1,编辑操作--不操作
* 2.普通操作--点击恢复原状,x图标消失=
* 4.创建适配器
* 5.设置适配器
* @author my
*
*/
public class MainActivity extends Activity {
private int imageRes[] = {R.drawable.f000,R.drawable.f001,R.drawable.f002,R.drawable.f003,R.drawable.f004,R.drawable.f005,R.drawable.f006,R.drawable.f007,R.drawable.f008};
private List<Integer>list;
private GridView gridView;
private MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = (GridView) findViewById(R.id.gridView);
//设置数据源
list = getListByArray();
myAdapter = new MyAdapter(list,MainActivity.this);
//设置适配器
gridView.setAdapter(myAdapter);
//设置单击事件
gridView.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(MainActivity.this, "单击", 0).show();
if(myAdapter.getisShow()){
myAdapter.setisShow(false);
}else{
}
}
});
//设置长按事件
gridView.setOnItemLongClickListener(new OnItemLongClickListener() { @Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(MainActivity.this, "长按", 0).show();
if(myAdapter.getisShow()){
}else{
myAdapter.setisShow(true);
}
return true;
}
});
}
private List<Integer> getListByArray() {
list = new ArrayList<Integer>();
for (int i = 0; i < imageRes.length; i++) {
list.add(imageRes[i]);
}
return list;
} }

普通状态

长按

删除

Android_gridView_LIstener_examle的更多相关文章

随机推荐

  1. HDU 4565 So Easy!

    So Easy! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  2. C# 中的 ref 和 out 的意义和使用方法

    原文C# 中的 ref 和 out 的意义和使用方法 向方法传递一个实参时,对应的形参会用实参的一个副本来初始化,不管形参是值类型(例如 int),可空类型(int?),还是引用类型,这一点都是成立的 ...

  3. [JDBC-1] JDBC Base Template

    以Statement建立的标准模板: static void template() throws Exception { Connection conn = null; Statement st = ...

  4. Convert to Objective-C ARC

    今天在进行代码走查时,竟然发现了下面这段代码: Bad Code 顿时感觉吐槽无力,虽然我反复强调内存管理问题,无非就是谁申请谁释放,利用强弱引用避免 retain-cycles,但是还是会有这样那样 ...

  5. MMU(why)

    在ARM中,MMU几个主要作用: 1. I/D Cache 管理      -> 大幅提高代码运行效率. 2. PA/VA 重映射        -> 实现多进程内存空间映射. 3. 内存 ...

  6. Petshop学习第三天

    ASP.NET缓存 ASP.NET充分利用缓存机制,通过某种方法,将系统需要的数据对象.Web页面存储在内存中,使得Web站点需要这些数据时,不经过繁琐的数据库连接.查询和复杂的逻辑运算,就可以触手可 ...

  7. HDU-4689 Derangement DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4689 题意:初始序列1,2...n,求所有满足与初始序列规定大小的错排数目.. 这道题目感觉很不错~ ...

  8. MyBatis如何防止SQL注入

    转自:http://www.myexception.cn/sql/1938757.html SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转 ...

  9. Cocos2d-x 3.x学习笔记(一):开始Cocos2d之旅

    首先,进入官网下载cocos2d-x:http://www.cocos.com/download/,当然你需要注册一个账号才可以下载. 接下来需要跟着官网的配置文档配置一下开发环境,不得不说,Coco ...

  10. 用 C# 做人脸检测(EmguCV)

    用 C# 做人脸检测(EmguCV)   原发:bbs.csdn.net 作者:野比 (conmajia@gmail.com) 时间:May 2012 下载源码 准备工作 下载 EmguCV 傻瓜安装 ...