diff options
author | Romain Guy <> | 2009-03-25 15:07:31 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-25 15:07:31 -0700 |
commit | 9c802c1e95befbd8de30ea4ebc48ae05cb948b2b (patch) | |
tree | b8d1a639f5887bb44a023d68ddfb1f39973ca95d /core | |
parent | 8b0662878eae69ab62e859b07165f086ea65cad5 (diff) | |
download | frameworks_base-9c802c1e95befbd8de30ea4ebc48ae05cb948b2b.zip frameworks_base-9c802c1e95befbd8de30ea4ebc48ae05cb948b2b.tar.gz frameworks_base-9c802c1e95befbd8de30ea4ebc48ae05cb948b2b.tar.bz2 |
Automated import from //branches/master/...@142575,142575
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/app/AlertDialog.java | 11 | ||||
-rw-r--r-- | core/java/com/android/internal/app/AlertController.java | 32 | ||||
-rw-r--r-- | core/java/com/android/internal/view/menu/MenuDialogHelper.java | 11 | ||||
-rw-r--r-- | core/res/res/layout/select_dialog.xml | 3 |
4 files changed, 46 insertions, 11 deletions
diff --git a/core/java/android/app/AlertDialog.java b/core/java/android/app/AlertDialog.java index f2b89c3..021dc2e 100644 --- a/core/java/android/app/AlertDialog.java +++ b/core/java/android/app/AlertDialog.java @@ -763,7 +763,16 @@ public class AlertDialog extends Dialog implements DialogInterface { P.mForceInverseBackground = useInverseBackground; return this; } - + + /** + * @hide + */ + public Builder setRecycleOnMeasureEnabled(boolean enabled) { + P.mRecycleOnMeasure = enabled; + return this; + } + + /** * Creates a {@link AlertDialog} with the arguments supplied to this builder. It does not * {@link Dialog#show()} the dialog. This allows the user to do any extra processing diff --git a/core/java/com/android/internal/app/AlertController.java b/core/java/com/android/internal/app/AlertController.java index b330a18..57dbb44 100644 --- a/core/java/com/android/internal/app/AlertController.java +++ b/core/java/com/android/internal/app/AlertController.java @@ -17,7 +17,6 @@ package com.android.internal.app; import static android.view.ViewGroup.LayoutParams.FILL_PARENT; -import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; @@ -49,6 +48,7 @@ import android.widget.ScrollView; import android.widget.SimpleCursorAdapter; import android.widget.TextView; import android.widget.AdapterView.OnItemClickListener; +import android.util.AttributeSet; import com.android.internal.R; @@ -672,7 +672,28 @@ public class AlertController { } } } - + + public static class RecycleListView extends ListView { + boolean mRecycleOnMeasure = true; + + public RecycleListView(Context context) { + super(context); + } + + public RecycleListView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public RecycleListView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + protected boolean recycleOnMeasure() { + return mRecycleOnMeasure; + } + } + public static class AlertParams { public final Context mContext; public final LayoutInflater mInflater; @@ -711,7 +732,8 @@ public class AlertController { public boolean mForceInverseBackground; public AdapterView.OnItemSelectedListener mOnItemSelectedListener; public OnPrepareListViewListener mOnPrepareListViewListener; - + public boolean mRecycleOnMeasure = true; + /** * Interface definition for a callback to be invoked before the ListView * will be bound to an adapter. @@ -787,7 +809,8 @@ public class AlertController { } private void createListView(final AlertController dialog) { - final ListView listView = (ListView) mInflater.inflate(R.layout.select_dialog, null); + final RecycleListView listView = (RecycleListView) + mInflater.inflate(R.layout.select_dialog, null); ListAdapter adapter; if (mIsMultiChoice) { @@ -886,6 +909,7 @@ public class AlertController { } else if (mIsMultiChoice) { listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); } + listView.mRecycleOnMeasure = mRecycleOnMeasure; dialog.mListView = listView; } } diff --git a/core/java/com/android/internal/view/menu/MenuDialogHelper.java b/core/java/com/android/internal/view/menu/MenuDialogHelper.java index bc51cf3..88f7b2f 100644 --- a/core/java/com/android/internal/view/menu/MenuDialogHelper.java +++ b/core/java/com/android/internal/view/menu/MenuDialogHelper.java @@ -67,6 +67,10 @@ public class MenuDialogHelper implements DialogInterface.OnKeyListener, DialogIn // Set the key listener builder.setOnKeyListener(this); + + // Since this is for a menu, disable the recycling of views + // This is done by the menu framework anyway + builder.setRecycleOnMeasureEnabled(false); // Show the menu mDialog = builder.create(); @@ -97,11 +101,8 @@ public class MenuDialogHelper implements DialogInterface.OnKeyListener, DialogIn } // Menu shortcut matching - if (mMenu.performShortcut(keyCode, event, 0)) { - return true; - } - - return false; + return mMenu.performShortcut(keyCode, event, 0); + } /** diff --git a/core/res/res/layout/select_dialog.xml b/core/res/res/layout/select_dialog.xml index 8e48ae2..249b527 100644 --- a/core/res/res/layout/select_dialog.xml +++ b/core/res/res/layout/select_dialog.xml @@ -23,7 +23,8 @@ This layout file is inflated and used as the ListView to display the items. Assign an ID so its state will be saved/restored. --> -<ListView xmlns:android="http://schemas.android.com/apk/res/android" +<view class="com.android.internal.app.AlertController$RecycleListView" + xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+android:id/select_dialog_listview" android:layout_width="fill_parent" android:layout_height="fill_parent" |