我已经触及了这个问题here,克里斯托弗给出了答案,但我真的没有这样做,所以我认为是时候把它变成一个真正的问题,而不仅仅是“跟进”=)
目前,我写的应用程序有4个不同的屏幕: 1.屏幕1 - 节点列表(主屏幕) 2.屏幕2 - 选项菜单,带有按钮的tableLayout 3.屏幕3 - 导航 4.屏幕4 - 版本等的文本细节
可以使用放置在顶部的“标题”视图导航到/从这些屏幕导航。然后标题有4个不同的按钮:
+--------------------+
| menu with buttons |
+--------------------+
| |
| |
| |
| C O N T E N T |
| |
| |
| |
+--------------------+
标题只是一个带有几个按钮的XML文件(header.xml)。该header.xml是使用include-markup包含在Layouts中的。例如,main.xml包含以下行:
<include layout="@layout/header"></include>
标题显示正常,但问题是 - 为标题中的按钮附加OnClickListeners的正确方法是什么?
Christopher pointed out你可以创建一个Activity类并在那里做钩子,如下所示:
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();
}
}
首先,我无法使其工作,因为方法 setupHeaderButtons 无法从FirstActivity访问。 其次,这是正确的方法吗?
此致
答案 0 :(得分:2)
setupHeaderButtons()
方法为protected
,因此只能由extend
基类的类访问,在这种情况下为BaseActivity
。
您确定FirstActivity
正在延长BaseActivity
吗?
答案 1 :(得分:2)
我更喜欢这样,所以你不必记住(并且可能忘记)为每个派生的Activity调用setupHeaderButtons。顺便说一句,设置 U pHeaderButtons这是一个更好的名字。
public class BaseActivity extends Activity {
protected View.OnClickListener mButtonListener;
@Override
public void setContentView(int layoutResID) {
super.setContentView(layoutResID);
setupHeaderButtons();
}
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);
}
}
答案 2 :(得分:1)
我个人认为你不应该过分复杂化。必须调用setupHeaderButtons应该没问题,特别是如果你只有一些活动。
如果您使用的是标准发布模式,则会重新启动该活动。如果您有兴趣了解启动模式,请查看Application Fundamentals。