我屈膝来找你,手里拿着问题。我对 Android 比较陌生,所以请原谅我可能会说的任何亵渎神明的话。
简介:我在应用中有几个布局,它们都必须包含一个共同的页脚。这个页脚有一些必不可少的按钮,用于返回主页、注销等。
在 Include 和 Merge 标签的帮助下,我设法让这个页脚出现在所有必需的页面中。问题在于为所有按钮定义点击监听器。虽然我可以在与包含页脚布局的屏幕相关联的每个 Activity 中定义监听器,但我发现当屏幕数量增加时这会变得非常乏味。
我的问题是这样的:我可以定义一个按钮点击监听器,它可以在整个应用程序中工作,可以使用 android:onClick 按钮的属性?
也就是说,我想在一个单独的类中定义一次按钮单击监听器,例如 FooterClickListeners,然后将该类简单地命名为任何按钮单击页脚的监听器类.这个想法是为监听器代码创建一个单点访问,以便对所述监听器的任何和所有更改都将反射(reflect)在整个应用程序中。
最佳答案
我在多个布局中使用的菜单也遇到了同样的问题。我通过在扩展RelativeLayout的类中扩展布局xml文件解决了这个问题,然后我在其中定义了onClickListener。之后,我在需要菜单的每个布局中都包含了该类。代码如下所示:
menu.xml
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageButton android:id="@+id/map_view"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:src="@drawable/button_menu_map_view"
android:background="@null"
android:scaleType="fitCenter"
android:layout_height="@dimen/icon_size"
android:layout_width="@dimen/icon_size">
</ImageButton>
<ImageButton android:id="@+id/live_view"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:src="@drawable/button_menu_live_view"
android:background="@null"
android:scaleType="fitCenter"
android:layout_height="@dimen/icon_size"
android:layout_width="@dimen/icon_size">
</ImageButton>
<ImageButton android:id="@+id/screenshot"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:src="@drawable/button_menu_screenshot"
android:background="@null"
android:scaleType="fitCenter"
android:layout_height="@dimen/icon_size"
android:layout_width="@dimen/icon_size">
</ImageButton>
</merge>
MenuView.java
public class MenuView extends RelativeLayout {
private LayoutInflater inflater;
public MenuView(Context context, AttributeSet attrs) {
super(context, attrs);
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.menu, this, true);
((ImageButton)this.findViewById(R.id.screenshot)).setOnClickListener(screenshotOnClickListener);
((ImageButton)this.findViewById(R.id.live_view)).setOnClickListener(liveViewOnClickListener);
((ImageButton)this.findViewById(R.id.map_view)).setOnClickListener(mapViewOnClickListener);
}
private OnClickListener screenshotOnClickListener = new OnClickListener() {
public void onClick(View v) {
getContext().startActivity(new Intent(getContext(), ScreenshotActivity.class));
}
};
private OnClickListener liveViewOnClickListener = new OnClickListener() {
public void onClick(View v) {
getContext().startActivity(new Intent(getContext(), LiveViewActivity.class));
}
};
private OnClickListener mapViewOnClickListener = new OnClickListener() {
public void onClick(View v) {
getContext().startActivity(new Intent(getContext(), MapViewActivity.class));
}
};
}
layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<SurfaceView android:id="@+id/surface"
android:layout_width="fill_parent"
android:layout_weight="1"
android:layout_height="fill_parent">
</SurfaceView>
<!-- some more tags... -->
<com.example.inflating.MenuView
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</RelativeLayout>
与 <com.example.inflating.MenuView />
标签,您现在可以在其他布局中重用您自己编写的布局(包括 onClickListener)。
关于android - 包含布局中的按钮 Onclick 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4121986/