【问题标题】:Can't dismiss a popup window (other solutions do not work)无法关闭弹出窗口(其他解决方案不起作用)
【发布时间】:2021-12-29 18:35:43
【问题描述】:

我正在尝试创建一个带有文本输入字段的简单 PopupWindow。

我知道有很多这类问题,但似乎没有一个能解决我的问题。这是我的弹出布局的 XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:background="@color/white"
    android:gravity="center"
    android:padding="15dp"
    android:layout_gravity="center"
    android:layout_height="wrap_content">


    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Dodaj produkt po identyfikatorze"
        android:textSize="15sp"
        android:gravity="center"
        />

    <EditText
        android:layout_width="match_parent"
        android:textSize="20sp"
        android:hint="Identyfikator"
        android:minWidth="250dp"
        android:id="@+id/insert_edit"
        android:gravity="center"
        android:layout_height="match_parent" />

    <LinearLayout
        android:layout_width="match_parent"
        android:gravity="center"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:layout_width="wrap_content"
            android:gravity="center"
            android:layout_height="wrap_content"
            android:id="@+id/insert_ok"
            android:text="OK"/>
        <Button
            android:layout_width="wrap_content"
            android:gravity="center"
            android:layout_height="wrap_content"
            android:id="@+id/insert_cancel"
            android:text="Anuluj"/>
    </LinearLayout>

</LinearLayout>

现在,我想在按下 FAB 时在我的主要活动中创建此布局。我就是这样做的:


public class ScrollingActivity extends AppCompatActivity {

    private ActivityScrollingBinding binding;
    private int ACTIVITY_LOAD_DATABASE = 1;
    AbstractDatabase database;
    RowAdapter rowAdapter;
    ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        database = Room.databaseBuilder(getApplicationContext(),  AbstractDatabase.class, "magazyn_db")
                .allowMainThreadQueries().build();
        binding = ActivityScrollingBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        FloatingActionButton fab = binding.addCode;
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.println(Log.INFO, "VIEWs", "Showing popup");
                PopupWindow codePopup;

                View popupView = getLayoutInflater().inflate(R.layout.insert_code, binding.getRoot());

                codePopup = new PopupWindow(popupView);
                codePopup.setFocusable(true);
                codePopup.setOutsideTouchable(true);

                View cancelButton = codePopup.getContentView().findViewById(R.id.insert_cancel);
                cancelButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        codePopup.dismiss();
                    }
                });

                View acceptButton = codePopup.getContentView().findViewById(R.id.insert_ok);
                acceptButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        View editView = codePopup.getContentView().findViewById(R.id.insert_edit);
                        String id = ((EditText)editView).getText().toString().trim();
                        insertNewElement(id);
                        codePopup.dismiss();
                        }
                });
            }
        });
[...]

由于未知原因,我的弹出窗口没有消失,无论是当我在它外部单击还是按取消按钮时(当我尝试从处理程序打印一些日志时,它们都起作用了)。我已经尝试了很多解决方案,也没有根,但是'showAtPosition'甚至没有显示它,而且stackoverflow上的解决方案似乎对我没有帮助,即使它们中有很多。

有人能指出这里的问题吗?

【问题讨论】:

    标签: java android xml android-layout


    【解决方案1】:

    public void dismiss () 处理弹出窗口。只有在执行了showAsDropDown(android.view.View) 之后才能调用此方法。否则,调用此方法将无效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-22
      • 1970-01-01
      • 2017-06-04
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多