版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android中怎么利用GridView實(shí)現(xiàn)多選效果
這篇文章給大家介紹Android中怎么利用GridView實(shí)現(xiàn)多選效果,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。ActionBar:
ActionBar是活動(dòng)中的一種控件,用以代替?zhèn)鹘y(tǒng)的品目頂端的標(biāo)題欄,它提供了多便利性。有關(guān)其詳細(xì)內(nèi)容會(huì)在以后研究,現(xiàn)在主要考慮上述需求的實(shí)現(xiàn)。先上效果圖首先是關(guān)于ActionBar的布局文件:主要是用于實(shí)現(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>
<!--
設(shè)置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個(gè)</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"
/>
<!--
這里是當(dāng)該圖片被選上的時(shí)候打上小勾的,因此起初是隱藏不顯示的
-->
</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
*
實(shí)現(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;//判斷該選項(xiàng)是否被選上的標(biāo)志量
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);//設(shè)置背景
}
}
}主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);//
設(shè)置為多選模式
mGridAdapter
=
new
GridAdapter(this);
mGridView.setAdapter(mGridAdapter);//
數(shù)據(jù)適配
mGridView.setMultiChoiceModeListener(this);//
設(shè)置多選模式監(jiān)聽(tīng)器
}
/**
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);
//
設(shè)置顯示內(nèi)容為GridView選中的項(xiàng)目個(gè)數(shù)
mActionText.setText(formatString(mGridView.getCheckedItemCount()));
//
設(shè)置動(dòng)作條的視圖
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)下,如果選中的項(xiàng)數(shù)不等于總共的項(xiàng)數(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
/*
*
當(dāng)點(diǎn)擊全選的時(shí)候,全選
點(diǎn)擊全不選的時(shí)候全不選
*/
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
//
當(dāng)每個(gè)項(xiàng)狀態(tài)改變的時(shí)候的操作
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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 上臺(tái)領(lǐng)獎(jiǎng)感言(5篇)
- DB12T 571-2015 歷史風(fēng)貌建筑安全性鑒定規(guī)程
- 中考百日誓師大會(huì)致辭
- 鐵山港課件教學(xué)課件
- 木地板課件教學(xué)課件
- 貧攻堅(jiān)課件教學(xué)課件
- 變網(wǎng)絡(luò)課件教學(xué)課件
- 清新區(qū)第二中學(xué)集團(tuán)九年級(jí)上學(xué)期語(yǔ)文期中聯(lián)考試卷
- 四年級(jí)數(shù)學(xué)(四則混合運(yùn)算)計(jì)算題專項(xiàng)練習(xí)與答案
- 美甲店合伙開(kāi)店合作協(xié)議書(2篇)
- 高中音樂(lè)《影視音樂(lè)》教學(xué)教學(xué)課件
- 圍墻護(hù)欄建設(shè)安裝施工組織設(shè)計(jì)方案
- 工匠精神第二講工匠精神內(nèi)涵課件
- 項(xiàng)目部印章使用授權(quán)書
- (完整版)英語(yǔ)四線格(A4打印)
- 文明禮儀主題班會(huì)課件(共23張)
- 航站樓管理部《機(jī)場(chǎng)使用手冊(cè)》實(shí)施細(xì)則
- 腦卒中基本知識(shí)課件
- 高效溝通與管理技能提升課件
- 消防維保方案 (詳細(xì)完整版)
- 檔案館建設(shè)標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論