`
obtain100
  • 浏览: 5336 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android GridView

阅读更多

需求:在Android移植的arm板子上实现图片用GridView展示,只用键盘操作。OS:android2.2.1


问题:如果焦点从GridView上的一个Item移出,使GridView失去焦点,当焦点返回GridView时,如果第一个获得焦点的Item是上次最后移出那个Item此时不会触发OnItemSelectedListener中的onItemSelected事件.


测试代码:

Activity代码:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        GridView mGridView = (GridView) findViewById(R.id.gview);
        mGridView.setOnItemSelectedListener(new OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                Toast.makeText(getBaseContext(), ""+arg2, Toast.LENGTH_SHORT)
                        .show();
            }
            public void onNothingSelected(AdapterView<?> arg0) {
            }
        });
        BaseAdapter adapter = new BaseAdapter() {
            public int getCount() {
                return 6;
            }
            public Object getItem(int arg0) {
                return null;
            }
            public long getItemId(int position) {
                return 0;
            }
            public View getView(int position, View convertView,  ViewGroup parent) {
                ImageView mImageView = new ImageView(MainActivity.this);
                mImageView.setImageResource(R.drawable.icon);
                return mImageView;
            }
        };
        mGridView.setAdapter(adapter);
    }

 

 

 

main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout android:orientation="horizontal"
        android:layout_width="wrap_content" android:layout_height="wrap_content">
        <Button android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:text="Text1Text1"
            android:focusable="true" />
        <Button android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:text="Text2Text2"
            android:focusable="true" />
        <Button android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:text="Text3Text3"
            android:focusable="true" />
    </LinearLayout>
    <GridView android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:id="@+id/gview"
        android:numColumns="4"></GridView>
</LinearLayout>
 

 


只用键盘操作确实会出现问题所述情况.

 

解决方法:

查看源代码中GridView有一个default的方法setSelectionInt第次做Item选择以后会记录下这个Item的postion.在焦点丢失时清空把这个置为-1就可以达到想要的目的.

 

 

添加如下代码:

 

mGridView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (!hasFocus) {
                    try {
                        @SuppressWarnings("unchecked")
                        Class<GridView> c = (Class<GridView>) Class
                                .forName("android.widget.GridView");
                        Method[] flds = c.getDeclaredMethods();
                        for (Method f : flds) {
                            if ("setSelectionInt".equals(f.getName())) {
                                f.setAccessible(true);
                                f.invoke(v,
                                        new Object[] { Integer.valueOf(-1) });
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        });
 

这样还是会存在一个问题,GridView默认的获得的焦点位置是0,如果焦点进入GridView,第0个Item得到焦点也不会触发ItemSelected事件,可以在加载完GridView的时候使用上面反射的代码清除默认焦点,达到预期效果。

分享到:
评论
1 楼 m331006 2012-07-20  
能不能回到gridView的时候,获取焦点的item是上一个焦点的垂直对应的那个item呢。。。不知道我描述的能不能理解?

相关推荐

    android Gridview分页实现

    在Android开发中,GridView是一种常用的布局控件,它允许我们以网格的形式展示数据。当我们处理大量数据时,分页加载可以提高应用性能,减少内存消耗,并提供更好的用户体验。本篇文章将详细讲解如何在Android中利用...

    android gridview分页和滑动效果

    在Android开发中,GridView是一种非常常见的布局控件,它允许我们以网格的形式展示数据,通常用于创建类似相册、应用列表等场景。本教程将详细讲解如何实现GridView的分页和滑动效果。 首先,我们需要了解GridView...

    Android GridView使用例子

    在Android开发中,GridView是一个非常常用的布局控件,它允许我们以网格的形式展示数据,通常用于创建类似照片墙、应用快捷方式或者菜单等界面。在这个"Android GridView使用例子"中,我们将深入探讨如何有效地利用...

    android gridview多选删除

    在Android开发中,GridView是一种常用的布局控件,它允许数据以网格的形式展示,通常用于创建类似照片库或应用列表的界面。"android gridview多选删除"是一个专题,主要涉及如何实现GridView中的多选功能,并支持...

    Android GridView分组带下拉刷新

    在Android开发中,GridView是一种常用的布局控件,它允许我们以网格形式展示数据,通常用于创建类似相册或应用列表的界面。在这个“Android GridView分组带下拉刷新”的主题中,我们将深入探讨如何实现一个功能丰富...

    AndroidGridView点击每一个图片进入个人页面渐变特效.zip

    这个"AndroidGridView点击每一个图片进入个人页面渐变特效.zip"压缩包包含的资源可能是一个示例项目,展示了如何在GridView中实现点击图片后平滑过渡到个人详情页面的特效。以下是对这个主题的详细说明: 1. **...

    android GridView 简单计算器

    在Android开发中,GridView是一种非常常用的布局控件,它允许我们以网格的形式展示数据,非常适合用来构建诸如照片墙、菜单列表等应用场景。在这个"android GridView 简单计算器"项目中,开发者巧妙地利用GridView...

    android gridview 加载大量图片。无OOM

    在Android开发中,GridView是一种常见的布局控件,用于展示多行多列的列表,常用于图片、文件等的网格化展示。然而,当GridView需要加载大量图片时,如果不妥善处理,很容易导致内存溢出(Out-Of-Memory,简称OOM)...

    android GridView数据库开发案例

    在Android开发中,GridView是一种非常常见的布局控件,它允许我们以网格的形式展示数据,通常用于创建如应用图标、照片库或菜单等界面。在这个"android GridView数据库开发案例"中,我们将深入探讨如何将GridView与...

    android gridview adapter 实例

    在Android开发中,GridView是一种非常常见的布局控件,它允许我们以网格的形式展示大量数据,通常用于创建如应用图标、照片墙或者菜单等界面。在这个"android gridview adapter 实例"中,我们将深入探讨如何使用...

    android GridView长按拖动,删除

    在Android开发中,GridView是一种常用的布局控件,它允许我们以网格的形式展示数据。在许多应用中,用户可能需要对GridView中的元素进行交互操作,比如长按拖动和删除。这个例子就是关于如何在Android的GridView中...

    android gridview上图下字

    ### Android GridView 实现上图下文布局的知识点详解 #### 一、理解GridView 在Android开发中,`GridView`是一种常用的视图组件,用于展示列表形式的数据,特别适合用来显示等宽等高的图像集合,例如相册应用中的...

    android Gridview 异步加载网络图片

    在Android开发中,GridView是一种常见的布局控件,用于展示数据集,通常以网格形式排列。在GridView中异步加载网络图片是一项重要的技能,特别是在构建图片丰富的应用如相册或社交媒体应用时。本示例适用于API级别17...

    android gridview 九宫格 动态添加信息

    在Android开发中,GridView是一种常用的布局控件,它允许我们以网格的形式展示数据,通常用于创建类似九宫格的效果。这种布局方式非常适合显示多张图片、图标或小图标配以文字的信息,就像许多手机应用中常见的那样...

    Android GridView + ViewFlipper布局界面,模仿“机锋市场.rar

    在Android开发中,GridView和ViewFlipper是两个非常重要的组件,它们可以被用来构建丰富的用户界面。本项目“Android GridView + ViewFlipper布局界面,模仿“机锋市场”旨在教你如何利用这两个组件来创建类似应用...

    Android GridView 多标题分组显示,上下拉刷新,convertview可重用

    在Android开发中,GridView是一种常用的布局控件,它允许我们以网格的形式展示数据,通常用于创建类似相册、应用列表等界面。本教程将重点讨论如何实现“Android GridView的多标题分组显示”以及“上下拉刷新”功能...

    Android GridView显示系统安装的应用程序

    在Android开发中,GridView是一种常见的布局控件,用于展示数据集,通常以网格形式排列,每个网格单元格显示一个项目。在"Android GridView显示系统安装的应用程序"这个主题中,我们将探讨如何使用GridView来列出...

    Android GridView + ViewFlipper布局界面,模仿“机锋市场.

    "Android GridView + ViewFlipper布局界面,模仿“机锋市场”"这个项目旨在教你如何利用这两种布局组件构建类似“机锋市场”的多列展示效果和动态切换功能。接下来,我们将深入探讨这两个关键组件以及它们在实现该...

    android gridview demo

    在Android开发中,GridView是一种非常重要的布局控件,它允许我们以网格的形式展示数据,通常用于创建像照片墙、应用快捷方式或者菜单等界面。在本篇内容中,我们将深入探讨`android gridview demo`的相关知识点,...

Global site tag (gtag.js) - Google Analytics