【问题标题】:Android - Popup window crashingAndroid - 弹出窗口崩溃
【发布时间】:2017-08-22 07:16:35
【问题描述】:

在stackoverflow社区搜索了很多解决方案,但没有一个解决我的问题:我在Main.java活动中有一个button,当点击button时,弹出菜单不显示,整个应用程序崩溃。

这是我的代码:

 Button _buyurtmaYaratish = (Button) findViewById(R.id.btn_buyurtma_berish);
    _buyurtmaYaratish.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
            View popupView = layoutInflater.inflate(R.layout.popup_menu, null);
            final PopupWindow popupWindow = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

Button btnPopup = (Button) findViewById(R.id.btn_popup);
                btnPopup.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        popupWindow.dismiss();
                    }
                });
                popupWindow.showAsDropDown(btnPopup, 50, -30);
            }
        });

我的 Main.xml 代码:

<RelativeLayout.......

<Button
        android:id="@+id/btn_buyurtma_berish"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:text="@string/buyurtma_berish"
        android:background="@drawable/button_kirish"
        android:textSize="18sp"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        android:textColor="@color/white"
        android:layout_below="@+id/edtx_summa_miqdori"/>

</RelativeLayout>

我的 popup.xml 代码:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rl"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center">
    <TextView
        android:id="@+id/txt_kk_mas_popup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/aloqaga_chiqamiz"
        android:layout_centerHorizontal="true"
        android:textSize="18sp"
        android:layout_marginTop="30dp"
        android:textColor="@color/black"/>
    <Button
        android:layout_width="280dp"
        android:layout_height="wrap_content"
        android:background="@drawable/button_kirish"
        android:text="@string/tasdiqlash"
        android:textColor="@color/white"
        android:textSize="19sp"
        android:id="@+id/btn_popup"
        android:layout_below="@+id/txt_kk_mas_popup"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="25dp" />
   </RelativeLayout>

我做错了什么?

java.lang.NullPointerException
                                                                    at datasite.com.aroba.DelHome$2.onClick(DelHome.java:49)
                                                                    at android.view.View.performClick(View.java:4192)
                                                                    at android.view.View$PerformClick.run(View.java:17248)
                                                                    at android.os.Handler.handleCallback(Handler.java:615)
                                                                    at android.os.Handler.dispatchMessage(Handler.java:92)
                                                                    at android.os.Looper.loop(Looper.java:137)
                                                                    at android.app.ActivityThread.main(ActivityThread.java:4950)
                                                                    at java.lang.reflect.Method.invokeNative(Native Method)
                                                                    at java.lang.reflect.Method.invoke(Method.java:511)
                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:997)
                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764)
                                                                    at dalvik.system.NativeStart.main(Native Method)

当我尝试点击 button 时,Logcat 中以红色突出显示

【问题讨论】:

  • 与问题分享您的崩溃日志
  • 你能发布你在堆栈跟踪中遇到的错误

标签: android android-layout popupwindow


【解决方案1】:

使用Button btnPopup = (Button)popupView.findViewById(R.id.btn_popup) 代替Button btnPopup = (Button) findViewById(R.id.btn_popup)

【讨论】:

    【解决方案2】:

    改变这个 :-> Button btnPopup = (Button) findViewById(R.id.btn_popup);

    用这个 :-> Button btnPopup = (Button) popupView.findViewById(R.id.btn_popup); 在你的代码中

    如下代码

         Button _buyurtmaYaratish = (Button) findViewById(R.id.btn_buyurtma_berish);
        _buyurtmaYaratish.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
                View popupView = layoutInflater.inflate(R.layout.popup_menu, null);
                final PopupWindow popupWindow = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    
    Button btnPopup = (Button) popupView.findViewById(R.id.btn_popup);
                    btnPopup.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            popupWindow.dismiss();
                        }
                    });
                    popupWindow.showAsDropDown(btnPopup, 50, -30);
                }
            });
    

    【讨论】:

    【解决方案3】:

    我认为你在这里犯了错误:

    Button btnPopup = (Button) findViewById(R.id.btn_popup);
    

    改成这样:

    Button btnPopup = (Button) popupView.findViewById(R.id.btn_popup);
    

    【讨论】:

    • 哦该死,我犯了这么容易的错误。现在它正在工作!谢谢
    • 有时会发生 :-)
    【解决方案4】:

    使用这个:

    Button btnPopup = (Button) popupView.findViewById(R.id.btn_popup);
    

    而不是这个:

    Button btnPopup = (Button) findViewById(R.id.btn_popup);
    

    【讨论】:

      【解决方案5】:

      你最好用AlertDialog代替Popup窗口,它不仅易于构建而且同时获得类似的背景效果。移动/更改更灵活,工作更顺畅

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-08
        • 2021-11-29
        • 2020-12-23
        • 2016-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多