版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
【移動應用開發(fā)技術(shù)】Android中怎么利用GridView實現(xiàn)多選效果
這篇文章給大家介紹Android中怎么利用GridView實現(xiàn)多選效果,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。ActionBar:
ActionBar是活動中的一種控件,用以代替?zhèn)鹘y(tǒng)的品目頂端的標題欄,它提供了多便利性。有關(guān)其詳細內(nèi)容會在以后研究,現(xiàn)在主要考慮上述需求的實現(xiàn)。先上效果圖首先是關(guā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);
//
設置顯示內(nèi)容為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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年信息技術(shù)咨詢合同樣本:電子商務平臺技術(shù)升級合作協(xié)議3篇
- 二零二五年度ktv員工績效考核與激勵合同范本2篇
- 2024幼兒園教職工派遣及績效管理合同3篇
- 2025年度服裝租賃行業(yè)創(chuàng)新服務合同3篇
- 2024榨菜種植與農(nóng)村電商物流合作合同3篇
- 2025年度水電工程勞務分包合同范本12篇
- 2024年革新突破:七款合同管理工具對比
- 2024年自卸車電子產(chǎn)品運輸合同
- 2024年甲乙雙方關(guān)于有機農(nóng)業(yè)的種植與銷售合同
- 2025版非煤礦山勞務承包與礦山環(huán)境保護合同3篇
- 安全注射培訓考核試題及答案
- 自動化包裝流水線解決方案
- 工藝豎井開挖支護施工技術(shù)方案(清楚明了)
- 水利五大員施工員教材講義
- 醫(yī)療機構(gòu)資產(chǎn)負債表(通用模板)
- 廢舊鋰離子電池高值資源化回收利用項目環(huán)評報告書
- 審計英語詞匯大全講課教案
- JIS G3507-1-2021 冷鐓用碳素鋼.第1部分:線材
- 初二家長會ppt通用PPT課件
- 小學生家庭作業(yè)布置存在的誤區(qū)及改進策略論文1
- 生物醫(yī)學研究的統(tǒng)計學方法課后習題答案 2014 主編 方積乾
評論
0/150
提交評論