在我的应用程序中,我最初在屏幕上有一个按钮,在按钮的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布局.........
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>
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>
答案 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(...)