1. 程式人生 > >Android的GridView簡單使用例項(附Demo)

Android的GridView簡單使用例項(附Demo)

目錄

1.例子1:GridView的簡單使用 

新建工程後,新建一個包GridView:

然後新建一個blank Activity,用來顯示GridView控制元件:,命名為:GridViewActivity.

 

注意:AppCompatActivity繼承字Activity,但不是直接繼承。 

 

先在MainActivity設定一個按鈕跳轉到這個Activity,設定佈局檔案

在MianActivity為這個按鈕繫結監聽器:

在GridActivity的佈局檔案生成一個GirdView控制元件,並設定屬性:

 在相應佈局檔案獲取控制元件物件,並設定屬性:

 

早GridView這個包新建一個類MyGridViewAdapter,然後繼承自,BaseAdapter:

 

複寫方法:

方法如下:

新建一個佈局檔案為這個,GridView提供圖片來源和文字來源,以及控制元件的屬性:

根佈局設定為:LinearLayout:

設定佈局檔案的屬性,新增一個ImageView和TextView控制元件:

程式碼:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp">
    <ImageView
        android:id="@+id/grid_IV_Id"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:scaleType="fitCenter"
        android:background="#00FF00"/>
    <TextView
        android:id="@+id/grid_TV_Id"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello"
        android:textColor="#FF0000"
        android:gravity="center"
        android:textSize="20dp"
        android:layout_marginTop="5dp"/>


</LinearLayout>

回去寫Adapter介面的函式,MyGridAdapter.java

宣告兩個引用,通過建構函式接受Cntext,也就是GridViewActivity.class,用於載入第三方網路圖片,另一個引數,主要是用於把所需要用的控制元件躲在佈局檔案載入到當前類當中:

寫一個靜態類,並宣告成員變數: 

複寫裡面一個重要方法:如下,給GridView載入文字和圖片: 

上面做完了就可以回到GridViewActivity中了:

一個簡單的GridView就做好了。

整體程式碼:

package com.example.yuan.e06_gridview.GridView;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.yuan.e05_listview.R;

public class MyGridViewAdapter extends BaseAdapter {
    //宣告引用
    private Context mContext;   //這個Context型別的變數用於第三方圖片載入時用到
    private LayoutInflater mlayoutInflater;
    //建立一個建構函式
    public MyGridViewAdapter(Context context){
        this.mContext=context;
        //利用LayoutInflate把控制元件所在的佈局檔案載入到當前類中
        mlayoutInflater=LayoutInflater.from(context);
    }
    @Override
    public int getCount() {
        return 10; //GridView的數目總共10個
    }

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

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

    //寫一個靜態的class,把layout_grid_item的控制元件轉移過來使用
    static class ViewHolder{
        public ImageView Grid_imageview;
        public TextView Grid_textview;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if(convertView == null){
            //填寫ListView的圖示和標題等控制元件的來源,來自於layout_list_item這個佈局檔案
            //把控制元件所在的佈局檔案載入到當前類中
            convertView = mlayoutInflater.inflate(R.layout.layout_grid_item,null);
            //生成一個ViewHolder的物件
            holder = new ViewHolder();
            //獲取控制元件物件
            holder.Grid_imageview=convertView.findViewById(R.id.grid_IV_Id);
            holder.Grid_textview=convertView.findViewById(R.id.grid_TV_Id);
            convertView.setTag(holder);

        }else{
            holder = (ViewHolder) convertView.getTag();
        }
        //修改空間屬性
        holder.Grid_textview.setText("汽車");
        //載入第三方網路圖片
        Glide.with(mContext).load("http://pic.yesky.com/uploadImages/2013/203/37F142RUD672.jpg").into(holder.Grid_imageview);
        return convertView;
    }
}

 圖片來源於網路,load中的地址就是網路圖片地址,關於使用三方庫載入ImageView:點我檢視

圖片來源於下圖:

執行應用程式:

點選跳轉:

 

執行如下:

2.例子2:為GridView設定點選效果

新建一個佈局檔案:

根佈局為:selector,命名為:grid_item

注意: 

 

在這裡修改:

增加兩個需要用到的顏色,透明色程式碼是#00000000: 

設定按下的效果: 

 

然後在佈局檔案,設定下selector屬性:

執行應用程式,點選就變紅色,不點選就是透明色:

3.例子3:為GridView邦定機監聽器

為GridView控制元件繫結監聽器,回到GridViewActivity:

GridView總共有十個條目,我們可以獲取到到底是哪一個條目被選中,其中有兩個方法,一個是常點選,一個是短點選:

繫結監聽器:

整體程式碼如下:

package com.example.yuan.e06_gridview.GridView;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.Toast;

import com.example.yuan.e05_listview.R;
import com.example.yuan.e06_gridview.MainActivity;

public class GridViewActivity extends AppCompatActivity {

    //宣告引用
    private GridView mGV1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_grid_view);
        mGV1=(GridView) findViewById(R.id.GV_1_Id);
        mGV1.setAdapter(new MyGridViewAdapter(GridViewActivity.this));

        //為GridView設定監聽器
        mGV1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //設定一個彈窗Toast,顯示被短點選的條目
                Toast.makeText(GridViewActivity.this,"點選位置:"+position,Toast.LENGTH_SHORT).show();
            }
        });
        mGV1.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                //設定一個彈窗Toast,顯示被短點選的條目
                Toast.makeText(GridViewActivity.this,"長按位置:"+position,Toast.LENGTH_SHORT).show();
                if(position == 0){
                    Intent intent =new Intent(GridViewActivity.this, MainActivity.class);
                    startActivity(intent);
                }
                return false;
            }
        });
    }
}

執行應用程式: