Всплывающее окно не становится невидимым, но оно проходит через код и ничего не происходит - PullRequest
0 голосов
/ 14 августа 2011

У меня есть проблема, чтобы сделать всплывающее окно невидимым. Когда я нажимаю, чтобы показать, он становится видимым, но когда я нажимаю кнопку «Отмена» (кнопка «Отмена» появляется во всплывающем окне), он не становится невидимым, но проходит нормально через код и ничего.

final PopupWindow pw = new PopupWindow(inflater.inflate(R.layout.popup,
            null, false), 300, 300, true);

    View layout = inflater.inflate(R.layout.popup,
            (ViewGroup) findViewById(R.id.llPopup));

    Button btnOK = (Button) layout.findViewById(R.id.btnOK);
    Button btnCancel = (Button) layout.findViewById(R.id.btnCancel);
    btnCancel.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (pw != null) {
                pw.dismiss();
            }

        }
    });

это popup.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:padding="10dip"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#AAAAAAAA"
    android:id="@+id/llPopup"
    >


<LinearLayout 
    android:orientation="horizontal"
    android:padding="10dip"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
>
<TextView 
    android:id="@+id/txtSearchBy"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Search By:"
/>
    <RadioGroup
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_gravity="right"
      android:orientation="vertical">
      <RadioButton
        android:id="@+id/rbPrice"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Time" />
      <RadioButton
        android:id="@+id/rbDuration"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Price" />
      <RadioButton
        android:id="@+id/rbLongitude"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Longitude" />
    </RadioGroup>

</LinearLayout>



    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"

        >
        <Button 
            android:id="@+id/btnCancel"
            android:layout_width="100sp"
            android:layout_height="wrap_content"
            android:text="Cancel"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
        />

        <Button 
            android:id="@+id/btnOK"
            android:layout_width="100sp"
            android:layout_height="wrap_content"
            android:text="OK"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
        />

    </RelativeLayout>


</LinearLayout>

Что я делаю неправильно, кто-нибудь может мне помочь?

1 Ответ

2 голосов
/ 14 августа 2011
View layout = inflater.inflate(R.layout.popup,
        (ViewGroup) findViewById(R.id.llPopup));

final PopupWindow pw = new PopupWindow(layout, 300, 300, true);

Button btnOK = (Button) layout.findViewById(R.id.btnOK);
Button btnCancel = (Button) layout.findViewById(R.id.btnCancel);
btnCancel.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if (pw != null) {
            pw.dismiss();
        }

    }
});

Каждый раз, когда вы вызываете метод inflate, вы создаете новый View;таким образом, кнопка отмены, на которую вы устанавливаете слушателя, отличается от той, которая находится во всплывающем окне.Как вы можете видеть выше, один и тот же View используется для обоих: инициализировать всплывающее окно и установить прослушиватель щелчков.

...