我已经谈到了这个问题here ,Christopher 对此给出了答案,但我不太明白,所以我认为是时候把它变成一个真正的问题,而不仅仅是一个“跟进” =)
就目前而言,我正在编写的应用程序有 4 个不同的屏幕:
- 屏幕 1 - 节点列表(主屏幕)
- 屏幕 2 - 选项菜单,带按钮的 tableLayout
- 屏幕 3 - 导航
- 屏幕 4 - 版本等的文本详细信息
可以使用放置在顶部的“标题” View 来导航这些屏幕。然后标题有 4 个不同的按钮:
+--------------------+
| menu with buttons |
+--------------------+
| |
| |
| |
| C O N T E N T |
| |
| |
| |
+--------------------+
header 只是一个带有几个按钮的 XML 文件 (header.xml)。 header.xml 使用包含标记包含在布局中。例如,main.xml 包含以下行:
<include layout="@layout/header"></include>
header 显示正常,但问题是 - 为 header 中的按钮附加 OnClickListeners 的正确方法是什么?
克里斯托弗 pointed out你可以创建一个 Activity 类并在那里做钩子(Hook),就像这样:
public class BaseActivity extends Activity {
protected View.OnClickListener mButtonListener;
protected void setupHeaderButtons() {
findViewById(R.id.header_btn_1).setOnClickListener(mButtonListener);
// ...
findViewById(R.id.header_btn_n).setOnClickListener(mButtonListener);
}
}
public class FirstActivity extends BaseActivity {
@Override
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.first_activity);
// This needs to be done *after* the View has been inflated
setupHeaderButtons();
}
}
首先,我无法让它工作,因为无法从 FirstActivity 访问方法 setupHeaderButtons
。其次,这样做是否正确?
setupHeaderButtons()
方法是 protected
的,因此它只能被扩展
基类的类访问,即在这种情况下为 BaseActivity
。
您确定您的 FirstActivity
正在扩展 BaseActivity
吗?
我是一名优秀的程序员,十分优秀!