弹出窗口中的下拉菜单是否可以显示为Spinner?

3
如何在弹出窗口中将Spinner显示为下拉菜单,它在对话框模式下工作正常,但当我将其设置为下拉菜单时,它会给我一个错误。
这是我的代码:
LayoutInflater layoutInflater = (LayoutInflater) getBaseContext()
                  .getSystemService(LAYOUT_INFLATER_SERVICE);
 final View popupView10 =layoutInflater.inflate(R.layout.successful_dontfollow_main, null);
popupWindow10 = new    PopupWindow(popupView10,ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,true);
 popupWindow10.showAtLocation(popupView10, Gravity.CENTER, 0,0);
 popupWindow9.dismiss();
 spinner1 = (Spinner) popupView10.findViewById(R.id.spinner2);
 spinner1.setAdapter(new MycustomAdapter( MainActivity.this,R.layout.popupbutton2_activity, payment));

以及我的自定义适配器类

 public  class MycustomAdapter extends ArrayAdapter<String>
{
    String[] payment={"BARCLAYS XXXX-XXX-XX89 ","BANK OF AMERICA XXXX-XXX-XX89","HSBC XXXX-XXX-XX89 "};

    public MycustomAdapter(Context context, int textViewResourceId,
                           String[] objects) {
        super(context, textViewResourceId, objects);
        // TODO Auto-generated constructor stub
    }

当我将其设置为下拉列表时,我会收到此错误。
07-15 12:26:27.952 24452-24452/com.example.user.popup E/AndroidRuntime: FATAL EXCEPTION: main
                                                                    Process: com.example.user.popup, PID: 24452
                                                                    android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRootImpl$W@228edc12 is not valid; is your activity running?
                                                                        at android.view.ViewRootImpl.setView(ViewRootImpl.java:562)
                                                                        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:282)
                                                                        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
                                                                        at android.widget.PopupWindow.invokePopup(PopupWindow.java:1104)
                                                                        at android.widget.PopupWindow.showAsDropDown(PopupWindow.java:1008)
                                                                        at android.widget.ListPopupWindow.show(ListPopupWindow.java:639)
                                                                        at android.widget.Spinner$DropdownPopup.show(Spinner.java:1138)
                                                                        at android.widget.Spinner.performClick(Spinner.java:683)
                                                                        at android.view.View$PerformClick.run(View.java:19881)
                                                                        at android.os.Handler.handleCallback(Handler.java:739)
                                                                        at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                        at android.os.Looper.loop(Looper.java:135)
                                                                        at android.app.ActivityThread.main(ActivityThread.java:5294)
                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                        at java.lang.reflect.Method.invoke(Method.java:372)
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)

如何将下拉菜单设置为下拉列表?
2个回答

1
 MainActivity.this.runOnUiThread(new Runnable() {
        public void run() {
         //Do your UI operations like dialog opening or Toast here


                  LayoutInflater layoutInflater = (LayoutInflater) getBaseContext()
                  .getSystemService(LAYOUT_INFLATER_SERVICE);
                 final View popupView10 =layoutInflater.inflate(R.layout.successful_dontfollow_main, null);
                 popupWindow10 = new    PopupWindow(popupView10,ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,true);
                 popupWindow10.showAtLocation(popupView10, Gravity.CENTER, 0,0);
                 popupWindow9.dismiss();
                 spinner1 = (Spinner) popupView10.findViewById(R.id.spinner2);
                 spinner1.setAdapter(new MycustomAdapter( MainActivity.this,R.layout.popupbutton2_activity, payment));
               }
         });

你在哪里使用你上面的代码,是在活动对话框中吗?展示完整的代码吗? - Sohail Zahid

0
使用以下代码显示弹出窗口作为下拉旋转器:
活动类:
public class SpinnerActivity extends Activity {

private LinearLayout layout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_spinner);

    Spinner s;
    layout = (LinearLayout) findViewById(R.id.popup);
    layout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            PopupWindow popUp= showDropDownData();
            popUp.showAsDropDown(view, 0, 0);
        }
    });
}

private PopupWindow showDropDownData() {
    PopupWindow popupWindow = new PopupWindow(this);

    //Initializing data from string.xml file
    String[] data={"BARCLAYS XXXX-XXX-XX89 ","BANK OF AMERICA XXXX-XXX-XX89","HSBC XXXX-XXX-XX89 "};
    CustomSpinnerAdapter adapter = new CustomSpinnerAdapter(this, data);

    // the drop down list is a list view
    ListView listViewSort = new ListView(this);

    // set our adapter and pass our pop up window contents
    listViewSort.setAdapter(adapter);

    // set on item selected
    //   listViewSort.setOnItemClickListener(onItemClickListener());

    popupWindow.setFocusable(true);
    popupWindow.setWidth(layout.getWidth());
    popupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);

    popupWindow.setContentView(listViewSort);
    return popupWindow;
}
}

以下是Xml文件:
 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/popup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:background="@drawable/layout_background"
android:padding="4dp">


<ImageView
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:src="@android:drawable/btn_star_big_on" />

<TextView
    android:id="@+id/openPopup"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:gravity="left|center_vertical"
    android:paddingLeft="10dp"
    android:text="popup window" />

</LinearLayout>

您可以使用onItemClickListener()从下拉列表中选择一个项目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接