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;
}
});
}
}
執行應用程式: