`
chenjohney
  • 浏览: 40746 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

GridView学习心得及发现的问题

阅读更多
     首先先说一下GridView是什么?还有什么功能?从字面上理解呢,就是格子视图了。
     功能:可以将你想要的控件ImageView或者TextView,或者你也可以在一个格子里显示多个组件,如显示文件夹里的文件时,不仅要想显示它的图标,同时在下方也要显示它的文件名,但是GridView究竟是如何显示的,它需要做什么样的准备工作,需要你告诉它什么信息,只有知道了这些,我们才能使用好它。
    
    注意GridView会出现这样的问题,当你把窗口设置为全屏幕时,显示出来的效果会在上方占据一个黑条,不论是模拟器还是实机都是一样。

通过Hierarchy View 工具查看时,我们可以看到它理论上要显示的效果,是没有上方的黑条,有可能是GridView自身的漏洞,如果有同学能够解决的,麻烦请留言指教


附上实现全屏幕的代码:
 this.requestWindowFeature(Window.FEATURE_NO_TITLE);
 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

通过开发文档"A view that shows items in two-dimensional scrolling grid. The items in the grid come from the ListAdapter associated with this view."我们知道它的实现是要通过适配器ListAdapter,但我们也可以通过构建自己的适配器,它继承于BaseAdapter,在这个适配器里我们可以实现自己想要的功能,
public class MyAdapter extends BaseAdapter{

            @Override
            public int getCount() {
                  // TODO Auto-generated method stub
                  return 0;
            }

            @Override
            public Object getItem(int arg0) {
                  // TODO Auto-generated method stub
                  return null;
            }

            @Override
            public long getItemId(int position) {
                  // TODO Auto-generated method stub
                  return 0;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                  // TODO Auto-generated method stub
                  return null;
            }
            
      }
这里面的四个方法是当你要执行GridView.setAdapte(new MyAdapter)这行代码时要调用到的,所以它的方法都是用get作为前辍,而我们要做的就是覆写这些方法以备于它的调用。
getCout:设置要显示格子的数量,一定要修改,设置为0时GridView不显示任何内容
getItem(int arg0:调用这个方法可以返回某个格子里的对象,可以不设置
getItemId(int position):调用这个方法返回某个格子里对象的id,也可以不设置
getView(int position, View convertView, ViewGroup parent):这个就是用来显示你的组件了,在文档里它的代码如下:
public View getView(int position, View convertView, ViewGroup parent){ 
ImageView imageView;
 if (convertView == null) {
// if it's not recycled, initialize some attributes
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
 imageView = (ImageView) convertView;
}
imageView.setImageResource(mThumbIds[position]);
return imageView;
}
当第一次显示时,covertView为null,这时我们创建一个控件,有两种方法:
第一种:
     为文档所显示的,通过外部传入的Context mContext创建一个控件imageView,并用setLayoutParams(new GridView.LayoutParams
(85, 85))设置它的大小,setScaleType设置裁剪类型,setPadding设置边距
第二种:
     首先:构造一个LayoutInflater可以将XML文件实例化,并用setTag方法设置要显示的组件
    
public View getView(int index, View convertView, ViewGroup parent) {
            GridHolder holder;
            ImageView imageView;
            if (convertView == null) {  
                  convertView = mInflater.inflate(R.layout.grid_item, null);  
                  imageView = (ImageView)convertView.findViewById(R.id.itemImage);
                  convertView.setTag(imageView);
            }else{
                  imageView = (ImageView) convertView.getTag();
            }
          imageView.setImageResource(mThumbIds[position]);
            return convertView;
      }

附:
GridTest.java
package com.grid.test;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.GridView;

public class GridTest extends Activity {
     private GridView gridview ;
     private List<GridInfo> list;
     private GridAdapter adapter;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gridlayout);
        gridview = (GridView) findViewById(R.id.gridview);
        adapter = new ImageAdapter(this);
        gridview.setAdapter(adapter);
    }
}
//这是第一种方法,第二种方法请自行替换
ImageAdapter.java
public class ImageAdapter extends BaseAdapter {
    private Context mContext;

    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }

    // references to our images
    private Integer[] mThumbIds = {
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7,
            R.drawable.sample_0, R.drawable.sample_1,
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7,
            R.drawable.sample_0, R.drawable.sample_1,
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7
    };
}

main.xml
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/gridview"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:numColumns="auto_fit"
      android:scrollbars="none"
/>
grid_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_height="wrap_content" android:paddingBottom="4dip"
      android:layout_width="fill_parent">
      <ImageView android:layout_height="wrap_content" android:id="@+id/itemImage"
            android:layout_width="wrap_content" android:layout_centerHorizontal="true" android:src="@drawable/icon">
      </ImageView>
      <TextView android:layout_width="wrap_content"
            android:layout_below="@+id/itemImage" android:layout_height="wrap_content"
            android:text="TextView01" android:layout_centerHorizontal="true"
            android:id="@+id/itemText">
      </TextView>
</RelativeLayout>



















  • 大小: 6 KB
  • 大小: 1.2 KB
分享到:
评论

相关推荐

    我的学习心得gridview

    int pageCount; //总页面数 int curPageIndex = 1;//当前页面 ... GridView1.PageCount.ToString() : (GridView1.PageIndex + 2).ToString()); btnLast.CommandName =GridView1.PageCount.ToString();

    GridView或DataGrid 固定表头,滚动数据的例子学习心得

    标题中的"GridView或DataGrid 固定表头,滚动数据的例子学习心得"指的是一种技术技巧,用于解决上述问题。主要方法是通过CSS样式和JavaScript来实现。首先,利用`table-layout:fixed`属性,可以固定表格布局,使得...

    GridView自定义分页的四种存储过程 学习心得

    首先,不使用GridView默认分页的原因在于其效率问题。当使用GridView的内置分页功能时,无论显示哪一页,整个数据源都会被加载到内存中,这可能导致大量的数据库查询,对服务器资源造成不必要的压力。尤其是在处理大...

    GridView超级自定义功能开源.rar

    总结来说,这个开源项目提供了高度自定义的GridView控件,涵盖了数据绑定、样式自定义、事件处理等多个方面,开发者可以通过研究源代码学习如何在自己的ASP.NET项目中实现类似的自定义功能。同时,`Web.Config`和`...

    vb.net学习心得

    通过修改`GridView`的样式属性,可以控制表格的布局和显示效果,如`word-break:keep-all;word-wrap:normal`用于避免单词被换行分割,保持文本完整性。 ### 10. 关闭和刷新页面 利用JavaScript函数`closeit()`和`...

    安卓开发工作心得体会.docx

    文章主要分为两个部分,分别是安卓学习心得和安卓实训心得。 安卓学习心得部分主要介绍了安卓的基本概念、开发环境、控件的功能等。作者介绍了安卓的定义、特点、发展历史、应用领域等,然后详细介绍了安卓的开发...

    C#系列--枚举类型与位标志学习心得

    ### C#中的枚举类型与位标志:学习心得与实践应用 #### 一、枚举类型的基本概念 在C#编程语言中,枚举(Enum)是一种数据类型,用于定义一组固定的命名常量集合。这些常量通常是整数值,但它们具有更明确的意义和...

    asp.net导出数据到Excel的几种方法 学习心得

    这个方法的基本思路是,先将ASP.NET网页中的控件(如GridView、DataGrid等)转换为HTML,然后通过HTTP响应将这些HTML内容以Excel文件格式发送给客户端。虽然用户在Excel中打开时看起来与实际的Excel文件无异,但实际...

    ANDROID实训心得体会.docx

    在实训中,学生可以学习如何设计漂亮的界面、如何使用ListView和GridView、如何实现动画效果等。 四、Android实训中的困难、解决问题的方式和方法 在实训中,学生可能会碰到各种困难,例如如何解决实际问题、如何...

    GridCtrl支持VS2010带使用心得

    压缩包中的"gridctrl_demoVS2010版"很可能是GridCtrl控件的示例项目,它包含了源代码和必要的资源文件,供开发者学习和参考。通过这个示例,我们可以了解如何在VS2010环境下集成并使用GridCtrl,包括控件的初始化、...

    DevExpress学习心得

    10. **社区支持**:DevExpress拥有活跃的开发者社区,你可以在论坛上提问、查找解决方案,与其他开发者交流经验,这对于学习和解决问题非常有帮助。 通过以上知识点的学习和实践,初学者能够逐步掌握DevExpress控件...

    ASP.NET学习大全经典总结

    例如,GridView、ListView等控件可以轻松实现数据的展示和编辑。 五、ASP.NET状态管理 在Web环境中,由于其无状态性,状态管理变得尤为重要。ASP.NET提供多种状态管理技术,包括视图状态、隐藏字段、Cookie、会话...

    ANDROID实训心得体会.pdf

    他们学习了UI设计、ListView、GridView等技术,并且学会了如何完成一个任务,明白了享受工作的乐趣。 其次,作者对团队开发的重要性进行了强调,指出团队的合作和沟通是实训的关键。作者认为,团队合作需要维持亲和...

    互动媒体学习社区

    3. **论坛讨论**:社区内可能设有论坛,让用户交流学习心得,提问和解答问题,促进知识共享和互助学习。 4. **进度跟踪**:系统可能记录用户的课程完成情况,帮助他们跟踪学习进度,以便于复习或继续未完成的课程。...

    aspnet实训心得体会.doc

    ASP.NET实训心得体会 ASP.NET是微软推出的一种用于构建Web应用程序的框架,它为开发者提供了丰富的功能和工具,使得创建动态网站、Web服务和应用程序变得更加高效和便捷。在实训过程中,我深入体验了ASP.NET的强大...

    ASP.NET.2.0服务器控件开发心得.rar

    在这个“ASP.NET.2.0服务器控件开发心得”中,我们可以期待学习到开发者在实际项目中积累的经验和技巧,尤其是在服务器控件开发方面的深入理解。 服务器控件是ASP.NET的核心特性之一,它们是网页交互和业务逻辑处理...

    ASP.NET学习过程中总结的一些技巧

    例如,使用GridView控件可以方便地展示表格数据,并支持排序、分页和编辑操作。 2. **视图状态(ViewState)管理** ViewState是ASP.NET用于保持页面间控件状态的一种机制。在页面postback时,ViewState能确保控件的...

    android学习资料

    在Android学习的广阔领域中,ApiDemos是一个重要的里程碑,它是Android SDK中附带的一个...同时,结合个人的学习笔记和心得体会,我们可以更有效地学习和掌握Android开发的各个方面,从而在技术编程的道路上不断进步。

    w3school asp.net教程

    在“老猫的理想-共享社区.txt”文件中,可能包含了一些社区交流的信息,比如学习心得、常见问题解答、更新日志或者用户反馈,这些都是学习过程中很好的辅助资料,可以与其他学习者交流互动,提升学习效果。...

Global site tag (gtag.js) - Google Analytics