#android
#Android
Вопрос:
В моей деятельности есть кнопка, при нажатии на которую вызывается следующий метод —
private ArrayList<ListView> myListViewList;
private ArrayList<MyListAdapter> myAdapterList;
public void onPopupButtonClick(View button) {
Log.v(TAG, "onPopupButtonClick");
PopupMenu popup = new PopupMenu(this, button);
Menu menu = popup.getMenu();
// how do I display the myListViewList as items of in this popup menu
// i.e how do I inflate myListViewList into menu object?
}
Я знаю, как сделать это программно для действия — создать linearlayouts и ListViews и, наконец, использовать addContentView в контексте действия.
Но трудно сделать то же самое для сценария всплывающего меню, как описано выше.
Ответ №1:
Проверьте этот код для всплывающего окна
LayoutInflater inflater = (LayoutInflater) PopupMain.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View layout = inflater.inflate(R.layout.popup,
(ViewGroup)findViewById(R.id.popup_menu_root));
PopupWindow pw = new PopupWindow(layout, 300,100, true);
pw.dismiss();
pw.showAtLocation(layout, Gravity.BOTTOM, 0, 10);
И ваш новый макет всплывающего окна должен быть следующим :
Popup.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@ id/popup_menu_root"
android:background="#FFFFFF"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="20dip" >
<TextView android:id="@ id/popup_menu_button1"
android:text="Copy"
android:textColor="#000000"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
Эта строка определяет высоту и ширину вашего нового вида (всплывающего окна)
PopupWindow pw = new PopupWindow(layout, 300,100, true);
и pw.showAtLocation(layout, Gravity.BOTTOM, 0, 10);
указывает, где должно отображаться всплывающее окно..
Комментарии:
1. Привет, фрагмент кода, который вы мне дали, рассказывает мне, как создать экземпляр PopupWindow. Но мой вопрос в том, как мне преобразовать ListView в результирующее представление PopupWindow? Или это вообще возможно? Должен ли я вместо этого просматривать диалоги для достижения своей цели? Моя цель — отобразить ListView (или массив ListViews) при нажатии кнопки всплывающего меню. Спасибо.
2. Да. Возможно ли это вообще? Кроме того, я хотел бы программно увеличить ListView, поскольку мне, возможно, придется отображать более одного содержимого ListView внутри всплывающего окна (что будет определено во время выполнения).
3. После некоторых экспериментов я обнаружил, что можно добавить ListView (или даже массив listviews) в представление PopupWindow. единственная проблема в том, что ни один из элементов не может быть сфокусирован. Но что интересно, они доступны для просмотра. Я должен выяснить, почему отдельные элементы в списке не могут быть сфокусированы, даже если я устанавливаю их так, чтобы они были явно указаны в пользовательском адаптере списка.
4. ошибка при получении метода findViewById(int) не определен для типа new View. OnClickListener(){} . Я раздуваю это в классе non activity