![【移動應用開發(fā)技術】Android中怎么利用GridView實現(xiàn)多選效果_第1頁](http://file4.renrendoc.com/view/61931871fd993cbedd20046755e1122e/61931871fd993cbedd20046755e1122e1.gif)
![【移動應用開發(fā)技術】Android中怎么利用GridView實現(xiàn)多選效果_第2頁](http://file4.renrendoc.com/view/61931871fd993cbedd20046755e1122e/61931871fd993cbedd20046755e1122e2.gif)
![【移動應用開發(fā)技術】Android中怎么利用GridView實現(xiàn)多選效果_第3頁](http://file4.renrendoc.com/view/61931871fd993cbedd20046755e1122e/61931871fd993cbedd20046755e1122e3.gif)
![【移動應用開發(fā)技術】Android中怎么利用GridView實現(xiàn)多選效果_第4頁](http://file4.renrendoc.com/view/61931871fd993cbedd20046755e1122e/61931871fd993cbedd20046755e1122e4.gif)
![【移動應用開發(fā)技術】Android中怎么利用GridView實現(xiàn)多選效果_第5頁](http://file4.renrendoc.com/view/61931871fd993cbedd20046755e1122e/61931871fd993cbedd20046755e1122e5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
【移動應用開發(fā)技術】Android中怎么利用GridView實現(xiàn)多選效果
這篇文章給大家介紹Android中怎么利用GridView實現(xiàn)多選效果,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。ActionBar:
ActionBar是活動中的一種控件,用以代替?zhèn)鹘y(tǒng)的品目頂端的標題欄,它提供了多便利性。有關其詳細內容會在以后研究,現(xiàn)在主要考慮上述需求的實現(xiàn)。先上效果圖首先是關于ActionBar的布局文件:主要是用于實現(xiàn)全選與全不選的功能的。<?xml
version="1.0"
encoding="utf-8"?>
<menu
xmlns:android="/apk/res/android"
>
<item
android:id="@+id/menu_select"
android:title="@string/select_all"/>
<item
android:id="@+id/menu_unselect"
android:title="@string/unselect_all"/>
</menu>其次是其樣式文件:<?xml
version="1.0"
encoding="utf-8"?>
<resources>
<!--
設置ActionBar的樣式
-->
<style
name="DiyTheme"
parent="@android:style/Theme.Holo">
<item
name="android:actionModeBackground">@drawable/tab_bg</item>
<item
name="android:actionModeCloseDrawable">@drawable/back</item>
<item
name="android:actionBarStyle">@style/DiyActionBarStyle</item>
</style>
<style
name="DiyActionBarStyle"
parent="@android:style/Widget.Holo.ActionBar">
<item
name="android:background">@drawable/tab_bg</item>
</style>
</resources>字符資源文件:<?xml
version="1.0"
encoding="utf-8"?>
<resources>
<string
name="app_name">GridView</string>
<string
name="selection">選中%s個</string>
<string
name="select_all">全選</string>
<string
name="unselect_all">全不選</string>
</resources>grid_item.xml文件<?xml
version="1.0"
encoding="utf-8"?>
<RelativeLayout
xmlns:android="/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:id="@+id/img_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
/>
<ImageView
android:id="@+id/select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@drawable/icon_choice"
android:visibility="gone"
/>
<!--
這里是當該圖片被選上的時候打上小勾的,因此起初是隱藏不顯示的
-->
</RelativeLayout>main.xml<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<GridView
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:columnWidth="75dip"
android:gravity="center"
android:horizontalSpacing="2dip"
android:numColumns="4"
android:verticalSpacing="2dip"
android:layout_marginTop="20dip"
/>
</LinearLayout>actionBar_layout.xml文件:<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/action_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textColor="@android:color/white"
android:layout_gravity="center_vertical"
/>
</LinearLayout>GridItem.java文件:package
com.kiritor;
/**
*
@author
Kiritor
*
實現(xiàn)自己的View繼承Checable接口*/
import
android.content.Context;
import
android.util.AttributeSet;
import
android.util.Log;
import
android.view.LayoutInflater;
import
android.view.View;
import
android.widget.Checkable;
import
android.widget.ImageView;
import
android.widget.RelativeLayout;
public
class
GridItem
extends
RelativeLayout
implements
Checkable
{
private
Context
mContext;
private
boolean
mChecked;//判斷該選項是否被選上的標志量
private
ImageView
mImgView
=
null;
private
ImageView
mSecletView
=
null;
public
GridItem(Context
context)
{
this(context,
null,
0);
}
public
GridItem(Context
context,
AttributeSet
attrs)
{
this(context,
attrs,
0);
}
public
GridItem(Context
context,
AttributeSet
attrs,
int
defStyle)
{
super(context,
attrs,
defStyle);
//
TODO
Auto-generated
constructor
stub
mContext
=
context;
LayoutInflater.from(mContext).inflate(R.layout.grid_item,
this);
mImgView
=
(ImageView)
findViewById(R.id.img_view);
mSecletView
=
(ImageView)
findViewById(R.id.select);
}
@Override
public
void
setChecked(boolean
checked)
{
//
TODO
Auto-generated
method
stub
mChecked
=
checked;
setBackgroundDrawable(checked
?
getResources().getDrawable(
R.drawable.background)
:
null);
mSecletView.setVisibility(checked
?
View.VISIBLE
:
View.GONE);//選上了則顯示小勾圖片
}
@Override
public
boolean
isChecked()
{
//
TODO
Auto-generated
method
stub
return
mChecked;
}
@Override
public
void
toggle()
{
setChecked(!mChecked);
}
public
void
setImgResId(int
resId)
{
if
(mImgView
!=
null)
{
mImgView.setBackgroundResource(resId);//設置背景
}
}
}主activity文件:package
com.kiritor;
import
java.util.HashMap;
import
java.util.Map;
import
java.util.Set;
import
android.app.Activity;
import
android.content.Context;
import
android.os.Bundle;
import
android.view.ActionMode;
import
android.view.LayoutInflater;
import
android.view.Menu;
import
android.view.MenuItem;
import
android.view.View;
import
android.view.ViewGroup;
import
android.widget.AbsListView.LayoutParams;
import
android.widget.AbsListView.MultiChoiceModeListener;
import
android.widget.BaseAdapter;
import
android.widget.Checkable;
import
android.widget.FrameLayout;
import
android.widget.GridView;
import
android.widget.ImageView;
import
android.widget.ListAdapter;
import
android.widget.TextView;
public
class
HomeActivity
extends
Activity
implements
MultiChoiceModeListener
{
private
GridView
mGridView;
private
GridAdapter
mGridAdapter;
private
TextView
mActionText;
private
static
final
int
MENU_SELECT_ALL
=
0;
private
static
final
int
MENU_UNSELECT_ALL
=
MENU_SELECT_ALL
+
1;
private
Map<Integer,
Boolean>
mSelectMap
=
new
HashMap<Integer,
Boolean>();
private
int[]
mImgIds
=
new
int[]
{
R.drawable.img_1,
R.drawable.img_2,
R.drawable.img_3,
R.drawable.img_4,
R.drawable.img_5,
R.drawable.img_6,
R.drawable.img_7,
R.drawable.img_8,
R.drawable.img_9,
R.drawable.img_1,
R.drawable.img_2,
R.drawable.img_3,
R.drawable.img_4,
R.drawable.img_5,
R.drawable.img_6,
R.drawable.img_7,
R.drawable.img_3,
R.drawable.img_4,
R.drawable.img_5,
R.drawable.img_5
};
/**
Called
when
the
activity
is
first
created.
*/
@Override
public
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mGridView
=
(GridView)
findViewById(R.id.gridview);
mGridView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);//
設置為多選模式
mGridAdapter
=
new
GridAdapter(this);
mGridView.setAdapter(mGridAdapter);//
數(shù)據(jù)適配
mGridView.setMultiChoiceModeListener(this);//
設置多選模式監(jiān)聽器
}
/**
Override
MultiChoiceModeListener
start
**/
@Override
public
boolean
onCreateActionMode(ActionMode
mode,
Menu
menu)
{
//
TODO
Auto-generated
method
stub
//
得到布局文件的View
View
v
=
LayoutInflater.from(this).inflate(R.layout.actionbar_layout,
null);
mActionText
=
(TextView)
v.findViewById(R.id.action_text);
//
設置顯示內容為GridView選中的項目個數(shù)
mActionText.setText(formatString(mGridView.getCheckedItemCount()));
//
設置動作條的視圖
mode.setCustomView(v);
//
得到菜單
getMenuInflater().inflate(R.menu.action_menu,
menu);
return
true;
}
@Override
public
boolean
onPrepareActionMode(ActionMode
mode,
Menu
menu)
{
//
TODO
Auto-generated
method
stub
/*
初始狀態(tài)下,如果選中的項數(shù)不等于總共的項數(shù),設置"全選"的狀態(tài)為True
*/
menu.getItem(MENU_SELECT_ALL).setEnabled(
mGridView.getCheckedItemCount()
!=
mGridView.getCount());
return
true;
}
@Override
public
boolean
onActionItemClicked(ActionMode
mode,
MenuItem
item)
{
//
TODO
Auto-generated
method
stub
/*
*
當點擊全選的時候,全選
點擊全不選的時候全不選
*/
switch
(item.getItemId())
{
case
R.id.menu_select:
for
(int
i
=
0;
i
<
mGridView.getCount();
i++)
{
mGridView.setItemChecked(i,
true);
mSelectMap.put(i,
true);
}
break;
case
R.id.menu_unselect:
for
(int
i
=
0;
i
<
mGridView.getCount();
i++)
{
mGridView.setItemChecked(i,
false);
mSelectMap.clear();
}
break;
}
return
true;
}
@Override
public
void
onDestroyActionMode(ActionMode
mode)
{
//
TODO
Auto-generated
method
stub
mGridAdapter.notifyDataSetChanged();
}
@Override
public
void
onItemCheckedStateChanged(ActionMode
mode,
int
position,
long
id,
boolean
checked)
{
//
TODO
Auto-generated
method
stub
//
當每個項狀態(tài)改變的時候的操作
mActionText.setText(formatString(mGridView.getCheckedItemCount()));
mSelectMap.put(position,
checked);/*
放入選中的集合中
*/
mode.invalidate();
}
/**
Override
MultiChoiceModeListener
end
**/
private
String
formatString(int
count)
{
return
String.format(getString(R.string.selection),
count);
}
private
class
GridAdapter
extends
BaseAdapter
{
private
Context
mContext;
public
GridAdapter(Context
ctx)
{
mContext
=
ctx;
}
@Override
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)用產品售賣合同范本
- 個人轉讓別墅合同范本
- 2025年度文化產業(yè)創(chuàng)意設計人員派遣及項目執(zhí)行合同
- 勞合合同范例
- 公司分紅合同范本
- 倒水泥混凝土合同范本
- 2025年度回遷房產權過戶及裝修配套服務合同
- scada業(yè)績合同范例
- 2025年度腳手架租賃及維護保養(yǎng)服務合同范本
- 2025年度寄售商品銷售代理協(xié)議
- 食材配送服務售后服務方案
- 新目標(goforit)版初中英語九年級(全一冊)全冊教案-unit
- 《如何做一名好教師》課件
- 2016-2023年婁底職業(yè)技術學院高職單招(英語/數(shù)學/語文)筆試歷年參考題庫含答案解析
- 貴陽市2024年高三年級適應性考試(一)一模英語試卷(含答案)
- 地理標志專題通用課件
- 魚類和淡水生態(tài)系統(tǒng)
- 全國大學高考百科匯編之《哈爾濱工業(yè)大學》簡介
- 學校安全教育教你如何遠離危險
- 【人教版】九年級化學上冊全冊單元測試卷【1-7單元合集】
- 中國傳統(tǒng)文化課件6八卦五行
評論
0/150
提交評論