girdview获取item内容position错乱

那是你adapter中取position的问题

android gridview 刷新页面后,仍停留在当前位置的方法
android上,我在一个页面上用gridview显示网格式的图片,点击每个图片执行对应的加载操作,执行完成后刷新每个gridview,当时每次刷新完成后,页面跳到最顶端,想让其每次刷新后,页面仍停留在点击位置……

异步刷新用notifydatasetchanged吧,这个会停在当前位置

via http://www.myexception.cn/android/1010914.html

gridView滑动ITEM就乱了

gridview中的item得到焦点

Gridview在回车和鼠标按下时有焦点变化,其实在getfocus时得到的都是grid而不是其中的item,这时需要做一些特殊的处理才能使GridView中的item得到焦点 。

gridview. setOnItemSelectedListener与gridview.onFocuschanged同时存在时, onFocuschanged先相应,onItemSelected不响应

gridview自带onItemClickListener
public void onItemClick(AdapterView<?> parent, View griditem, int position,long arg3),其中griditem指你点击的项;position指的是你点击的项在gridview数据源中的索引。如果你想改变原来的图片,则可以这么做(假设你gridview中item的布局文件里只有一个ImageView):
ImageView image=(ImageView)griditem;
image.setBackgroundDrawable(R.drawable.newimage);//这里写新图片资源名称

 item获得焦点后选中背景色透明

  • 将listSelector属性设成透明:<com.modou.app.Activity.host.GridViewExtend

android:id=”@+id/list_gridView”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:listSelector=”@android:color/transparent”
android:numColumns=”2″
android:cacheColorHint=”#00000000″
/>

  •  android:background=”@drawable/grid_selector_background”

grid_selector_background.xml代码
<?xml version=”1.0″ encoding=”utf-8″?>
<selector xmlns:android=”http://schemas.android.com/apk/res/android”&gt;
<item android:state_window_focused=”false”
android:drawable=”@android:color/transparent” />
<item android:state_selected=”true”
android:drawable=”@drawable/btn_more_pressed_market” />
<item android:state_pressed=”true”
android:drawable=”@drawable/btn_more_pressed_market” />
</selector>

item获得焦点后 使背景圆角

自定义Drawable下的background.xml,根元素选择selector,然后定义solid和corners,最后在main.xml中添加android:listSelector=”@drawable/background”  就ok了。

判断GridView第一个item和最后一个item


A   A   A   A   A   A   A
B   B    B   B   B   B    B

假如上面是一个显示2行的GridView,现在效果需要当GridView上下滑动到最下端的时候”向下的箭头“就会消失,滑动到顶端的时候”向上的箭头“就会消失。

取消GridView中的Button焦点

设置 android:clickable=”false” 即可.

Button焦点优先的问题,否则只能点击到Button,点不到GridView的Item:afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点

item点击事件会使里面的Button也出现按压的效果

Difference between onItemClickListener and OnItemSelectedListener of AdapterView

  • OnItemSelectedListener – Interface definition for a callback to be invoked when an item in this view has been selected. GridView移动后选中图片Items的事件处理 /*为GridView添加图片Items移动选中事件监听器*/123.jpg
  • OnItemClickListener – Interface definition for a callback to be invoked when an item in this AdapterView has been clicked.
  • OnItemSelectedListener is used for Spinners, and OnItemClickListener is used for ListViews.
  • 指的是鼠标获得一个条目的焦点,字面上理解是选择一个条目
  • OnItemSelectedListener是用来监听【选中某一项】的事件,不是【点击】某一项的事件,虽然点击能引发选中事件,但不是必然的,一般用按键或者鼠标滚轮移动焦点都会产生这个选中事件

viewHolder

  holder.add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showInfo();
}
});
关于ListView、GridView滚动条定位到选中的那一条内容

  • 获取当前pageadapter的位置 myPager.getCurrentItem()
  • gallery.setSelection(currentIndex_);   public       void      setSelection(int position) //设置选中的条目.

当前页面与前页面的result问题

activity.this.setResult(1); //其中1为标志位
前一个activity中的onActivityForResult中可进行设置
activity.this.finish();

将每个activity的属性中增加 android:launchMode=”singleInstance”

在点击back键启动另一个Activity的时候新建了一个Task,将要返回的Activity放置在这个新建的Task中,而之前的那个Activity是在它自己的Task中,单击back的时候只是把它的Task弹开了,并没有将它本身弹出栈

gridview图片展示,长按进入编辑模式 – 长按更换用户头像

gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){});

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

holder.image1.setImageResource(R.drawable.border);    //添加图片(带边框的透明图片)[主要目的就是让该图片带边框]
holder.image2.setVisibility(View.VISIBLE);  //设置图片右上角的对号显示
imgAdapter.addNumber(position+””);    //把该图片添加到adapter的选中状态,防止滚动后就没有在选中状态了。
selectFileLs.add(loadimg);
}
seclectNumView.setText(“选中”+selectFileLs.size()+”张图片”);
});

gridview的adapterconvertview

public View getView(final int position, View convertView, ViewGroup parent) {}

getview有三个参数,int position, View convertView, ViewGroup parent。其中第三个参数是一个viewgroup,用的比较少,重点介绍前两个参数。
以listview为例,我们的adapter是一个listview的适配器,展现在我们面前的listview就是通过getview方法一条条刷新出来的,滚动条向下滚动的时候会刷新出来一个新的view(每条item对应一个view)
但是当我们滚动条来回滚动的时候呢?需要不停地将现有的view回收,然后刷新出新的view吗?不是。
事实上,当我们把所有的view全部刷新一遍(也就是滚动条从上往下滚动一遍)之后我们会发现,无论我们之后再怎么滚动,都不会再产生新的view,也就是view全部被缓存了。
listview_recycler.jpg
如图,当初次显示listview的时候,系统不断调用adapter的getview方法,假设屏幕能显示8个条目,那就调用8次,然后返回每个条目的view,此时每次调用getview方法时的position参数(第一个参数)就是此时正在刷新的view的位置,而convertview参数(第二个参数)为空。当我们滚动一个条目,即把item1滚动出屏幕之后,之前的7个itemview都不需要再刷新了,只需要刷新后来显示的一个itemview即可,而convertview此时就为滚出屏幕的item1的view

重写getview方法时,首先判断convertview(它的含义上面介绍过了)是否为空,如果为空,也就是第一次显示的话就要新建一个要显示的对象(比如一张图片,一段文字,anything,上面介绍的是一个类,包含了图片,文字等,使用tag来加载到convertview,比较复杂),如果不为空,也就是之前显示过了,那就从convertview中取(显示过了的东西存储在convertview,可以这么理解),把之前的附加信息取出来,也就是用gettag方法。之后就可以初始化你要显示的对象了

Android Gallery’s getView() returning incorrect position

getView is called in order to render (or pre-render, or post-render in some cases) each image in the Gallery. It shouldn’t be depended on to identify which image is selected. Instead, override OnItemSelectedListener in your HelloGallery onCreate() method

GridView 详解及拓展

android:verticalSpacing=”10dp”  //行宽
android:horizontalSpacing=”10dip”  //列宽
android:numColumns=”3″  //列数

android:stretchMode=”columnWidth”  //列可扩展

以上列数为3,若想在高分辨率中列数设置为4

首先,需要在属性中设置列为可扩展android:stretchMode=”columnWidth”。然后在代码中做个判断:

if(Metrics.heightPixels == 1280 && Metrics.widthPixels == 800){
gridview.setNumColumns(4);
}这样GridView的列数是可以随分辨率不同而做更多的设置。

stretchMode属性值的作用是设置GridView中的条目以什么缩放模式去填充空间。参数stretchMode 可选值:

  • NO_STRETCH,
  • STRETCH_SPACING,
  • STRETCH_SPACING_UNIFORM,
  • STRETCH_COLUMN_WIDTH

设置个边框,并且右上角设置个CheckBox来美化选中状态

    

边框:

ImageView 要设置一个属性:android:layout_margin=”4dip” //上下左右留出4dip的具体来显示边框的效果。

并且在相应的Adapter中做个判断,选中的话背景图片颜色为#87CEFA,未选中时为3FFFFFF:

if(bSelect){ //bSelect表示是否选中
arg1.setBackgroundColor(Color.parseColor(“#87CEFA”));
}else{
arg1.setBackgroundColor(Color.parseColor(“#FFFFFF”));}

Gridview 中 android:layout_margin=”10dp”

GridView中设置了Button以后就不能响应OnItemClick()

当我们在GridView或者ListView里面设置了Textiew的时候,假如我们不给Textiew设置onlick()的话,那么 Gridiew的OnItemClick()就是可以执行的,但是当把TextView换成是Button的时候我们也不设置onClick()的话,GridView的OnItemClick()也是不能执行的

说明Button和TextView内部事件方面有区别,去查看 Button的源代码,代码很少就这么几句
public class Button extends TextView {
public Button(Context context) {
this(context, null);
}

public Button(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.buttonStyle);
}

public Button(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
所以,主要的猫腻还是在com.android.internal.R.attr.buttonStyle这个里面,查看这个xml文件,Button设置多了两个属性如下:
<item name=”android:focusable”>true</item>
<item name=”android:clickable”>true</item>
所以我们要在代码里面把这两个属性设为false,这样就可以响应GridView的onItemClick方法了,因为button拦截了点击事件,你也可以试下给button设置监听器,button肯定可以得到点击事件。

GridView点击item不响应
gridView.setOnItemClickListener(new OnItemClickListener() {});
点击每一个item的时候没有反应,无法获取的焦点。原因多半是由于在你自己定义的Item中存在诸如ImageButton,Button,CheckBox等子控件(也可以说是Button或者Checkable的子类控件),此时这些子控件会将焦点获取到,所以常常当点击item时变化的是子控件,item本身的点击没有响应

该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。

属性的值有三种:

  • beforeDescendants:viewgroup优先其子类控件获取到焦点
  • afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
  • blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就好了,至此listview点击的灵异事件告一段落。

本身 GridView就会监听到点击事件,当你点击LinearLayout的时候,点击事件会向下传递。要是不想让gridView相应点击事件,那就让LinearLayout拦截点击事件,不让事件向下传递,GridView本身就有点击每一个iten的默认事件,所以外层的LinearLayout点击效果无效,如果只对LinearLayout产生点击效果,LinearLayout需要设置属性Clickable=“true”

gridview 中按钮事件

给Button或ImageButton加上这个android:focusable=”false”属性
给GridView的每一个item的布局文件中的最外层的layout加上这个属性android:descendantFocusability=”blocksDescendants”

 

naive error

changing android:layout_below="@+id/birth"  to android:layout_below="@id/birth", because at this point it is already declared, which the + implies, it could lead to problems when declaring it again.

java.io.IOException: Unable to open sync connection!

get into Settings->Development->, and try disabling ‘USB debugging’ and enabling the same

ndroid:padding和android:layout_margin的区别

  • padding是站在父view的角度描述问题,它规定它里面的内容必须与这个父view边界的距离。
  • margin则是站在自己的角度描述问题,规定自己和其他(上下左右)的view之间的距离,如果同一级只有一个view,那么它的效果基本上就和padding一样
两张图片,点击一张图片,变成另一张,再点击一次,还原

首先定义一个全局变量 int chang;

然后在监听里面做判断:

layout.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
if (item==0) {
imageView.setImageResource(R.drawable.selected);
item=1;
} else{
imageView.setImageResource(R.drawable.pressed);
item=0;
}
}
});


BlueAsteroid

Just another WordPress.com site

Jing's Blog

Just another WordPress.com site

Start from here......

我的心情魔方

天才遠私廚

希望能做一個分享各種資訊的好地方

语义噪声

西瓜大丸子汤的博客

笑对人生,傲立寰宇

Just another WordPress.com site

Where On Earth Is Waldo?

A Project By Melanie Coles

the Serious Computer Vision Blog

A blog about computer vision and serious stuff

Cauthy's Blog

paper review...

Cornell Computer Vision Seminar Blog

Blog for CS 7670 - Special Topics in Computer Vision

datarazzi

Life through nerd-colored glasses

Luciana Haill

Brainwaves Augmenting Consciousness

槑烎

1,2,∞

Dr Paul Tennent

and the university of nottingham

turn off the lights, please

A bunch of random, thinned and stateless thoughts around the Web

John's Weblog

Just another WordPress.com weblog

I Am That I Am

Chasing tomorrow's sunrise.