如何处理android中弹出窗口内按钮的onclick事件

时间:2010-06-08 12:45:15

标签: android

在我的应用程序中,我最初在屏幕上有一个按钮,在按钮的onclick中,应该会打开一个弹出窗口。在弹出窗口中,我有一个图像按钮,并且此按钮的onclick,我想开始一个活动。弹出窗口打开,但我不明白如何处理弹出窗口中图像按钮的onclick

在main.xml中,我有一个按钮,在popup_example.xml中,我有一个图像按钮。

我的Java代码如下:

final LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
final Button b=(Button)findViewById(R.id.btn);
b.setOnClickListener(new OnClickListener()
{
    public void onClick(View v)
    {
        PopupWindow pw = new PopupWindow(inflater.inflate(R.layout.popup_example,(ViewGroup)findViewById(R.layout.main)));
        pw.showAtLocation(v, Gravity.LEFT,0,0);
        pw.update(8,-70,150,270);

        //if onclick written here, it gives null pointer exception.
        ImageButton img=(ImageButton)findViewById(R.id.home);
        img.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v)
            {
                Intent.....
            }
        });

        //if onclick is written here it gives runtime exception.
    }); 

我有两个xml布局.........

  1. main.xml中

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:orientation="vertical" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"> 
    
        <ImageButton 
            android:id="@+id/btn"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:src="@drawable/ghj" />
    </LinearLayout>
    
  2. popup_example.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="wrap_content" 
        android:background="#8E2323"> 
    
       <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
            android:orientation="vertical" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:padding="5px">
    
            <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
                android:orientation="vertical" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:padding="5px"
                android:background="#000000">
    
                <ImageButton android:id="@+id/home"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:focusable="true"
                     android:src="@drawable/vitalss"
                     android:layout_weight="1"
                     android:background="#8E2323"/>                 
            </TableLayout>
        </TableLayout>
    </LinearLayout> 
    

4 个答案:

答案 0 :(得分:16)

您必须在Popup视图中找到该按钮:

View pview = inflater.inflate(R.layout.popup_example,(ViewGroup)findViewById(R.layout.main));
PopupWindow pw = new PopupWindow(pview);
            pw.showAtLocation(v, Gravity.LEFT,0,0);
            pw.update(8,-70,150,270);

              //if onclick written here, it gives null pointer exception.
            ImageButton img=(ImageButton)pview.findViewById(R.id.home);
            img.setOnClickListener(new OnClickListener()
            {
                public void onClick(View v)
                {
                    Intent.....
                }
        });

答案 1 :(得分:1)

这不会在Inflater中出错并正常工作:

    LayoutInflater layoutInflater = getLayoutInflater();


      View pview = layoutInflater.inflate(R.layout.popup_example,    (ViewGroup)findViewById(R.layout.main));
       PopupWindow pw = new PopupWindow(pview);
        pw.showAtLocation(v, Gravity.LEFT,0,0);
        pw.update(8,-70,150,270);

          //if onclick written here, it gives null pointer exception.
        ImageButton img=(ImageButton)pview.findViewById(R.id.home);
        img.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v)
            {
                Intent.....
            }
    });

答案 2 :(得分:0)

最佳解决方案:) 从xml传递onCclickMethod

<ImageButton
            android:id="@+id/save_btn"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            **android:onClick="onClick"**
            android:contentDescription="@string/save"
            android:src="@drawable/save" />
它从我身上扯下来......

答案 3 :(得分:0)

在主要活动按钮onClick上,您可以使用:

    popupWindow.getContentView().findViewById(R.id.buttonInPopup).setOnClickListener(new OnClickListener(...)