From 6c7ec482e33057ad3a3f09d9601615236690d79b Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Fri, 13 Aug 2010 19:11:21 -0700 Subject: [PATCH] Add GridView selection mode demo Change-Id: I154424f29458870f66b3bb6b2025a4cd6fd16ee8 --- samples/ApiDemos/AndroidManifest.xml | 9 + .../com/example/android/apis/view/Grid3.java | 164 ++++++++++++++++++ .../com/example/android/apis/view/List15.java | 18 ++ 3 files changed, 191 insertions(+) create mode 100644 samples/ApiDemos/src/com/example/android/apis/view/Grid3.java diff --git a/samples/ApiDemos/AndroidManifest.xml b/samples/ApiDemos/AndroidManifest.xml index 2f1060756..94bc15788 100644 --- a/samples/ApiDemos/AndroidManifest.xml +++ b/samples/ApiDemos/AndroidManifest.xml @@ -1360,6 +1360,15 @@ + + + + + + + diff --git a/samples/ApiDemos/src/com/example/android/apis/view/Grid3.java b/samples/ApiDemos/src/com/example/android/apis/view/Grid3.java new file mode 100644 index 000000000..3b853e109 --- /dev/null +++ b/samples/ApiDemos/src/com/example/android/apis/view/Grid3.java @@ -0,0 +1,164 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.apis.view; + +import com.example.android.apis.R; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ResolveInfo; +import android.os.Bundle; +import android.view.ActionMode; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.Checkable; +import android.widget.FrameLayout; +import android.widget.GridView; +import android.widget.ImageView; + +import java.util.List; + +/** + * This demo illustrates the use of CHOICE_MODE_MULTIPLE_MODAL, a.k.a. selection mode on GridView. + */ +public class Grid3 extends Activity { + + GridView mGrid; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + loadApps(); + + setContentView(R.layout.grid_1); + mGrid = (GridView) findViewById(R.id.myGrid); + mGrid.setAdapter(new AppsAdapter()); + mGrid.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL); + mGrid.setMultiChoiceModeListener(new MultiChoiceModeListener()); + } + + private List mApps; + + private void loadApps() { + Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); + mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); + + mApps = getPackageManager().queryIntentActivities(mainIntent, 0); + } + + public class AppsAdapter extends BaseAdapter { + public AppsAdapter() { + } + + public View getView(int position, View convertView, ViewGroup parent) { + CheckableLayout l; + ImageView i; + + if (convertView == null) { + i = new ImageView(Grid3.this); + i.setScaleType(ImageView.ScaleType.FIT_CENTER); + i.setLayoutParams(new ViewGroup.LayoutParams(50, 50)); + l = new CheckableLayout(Grid3.this); + l.setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.WRAP_CONTENT, + GridView.LayoutParams.WRAP_CONTENT)); + l.addView(i); + } else { + l = (CheckableLayout) convertView; + i = (ImageView) l.getChildAt(0); + } + + ResolveInfo info = mApps.get(position); + i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager())); + + return l; + } + + + public final int getCount() { + return mApps.size(); + } + + public final Object getItem(int position) { + return mApps.get(position); + } + + public final long getItemId(int position) { + return position; + } + } + + public class CheckableLayout extends FrameLayout implements Checkable { + private boolean mChecked; + + public CheckableLayout(Context context) { + super(context); + } + + public void setChecked(boolean checked) { + mChecked = checked; + setBackgroundDrawable(checked ? + getResources().getDrawable(R.drawable.blue) + : null); + } + + public boolean isChecked() { + return mChecked; + } + + public void toggle() { + setChecked(!mChecked); + } + + } + + public class MultiChoiceModeListener implements GridView.MultiChoiceModeListener { + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + mode.setTitle("Select Items"); + mode.setSubtitle("One item selected"); + return true; + } + + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return true; + } + + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + return true; + } + + public void onDestroyActionMode(ActionMode mode) { + } + + public void onItemCheckedStateChanged(ActionMode mode, int position, long id, + boolean checked) { + int selectCount = mGrid.getCheckedItemCount(); + switch (selectCount) { + case 1: + mode.setSubtitle("One item selected"); + break; + default: + mode.setSubtitle("" + selectCount + " items selected"); + break; + } + } + + } +} diff --git a/samples/ApiDemos/src/com/example/android/apis/view/List15.java b/samples/ApiDemos/src/com/example/android/apis/view/List15.java index e3f2e7e2a..07e57525b 100644 --- a/samples/ApiDemos/src/com/example/android/apis/view/List15.java +++ b/samples/ApiDemos/src/com/example/android/apis/view/List15.java @@ -1,3 +1,18 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.example.android.apis.view; import com.example.android.apis.R; @@ -12,6 +27,9 @@ import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; +/** + * This demo illustrates the use of CHOICE_MODE_MULTIPLE_MODAL, a.k.a. selection mode on ListView. + */ public class List15 extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) {