“标题”视图和按钮:如何将监听器附加到没有自己的活动的“标题”中的按钮?

我在这里提到了这个问题,克里斯托弗在这里给出了答案,但我真的没有这样做,所以我认为是时候把它变成一个真正的问题,而不仅仅是“跟进”=)


目前,我正在编写的应用程序有4个不同的屏幕:1。屏幕1 – 节点列表(主屏幕)2。屏幕2 – 选项菜单,tableLayout与按钮3.屏幕3 – 导航4.屏幕4 – 文本详细信息版本等

可以使用放置在顶部的“标题”视图来导航这些屏幕。 标题然后有4个不同的按钮:

+--------------------+ | menu with buttons | +--------------------+ | | | | | | | CONTENT | | | | | | | +--------------------+ 

标题只是一个带有几个按钮的XML文件(header.xml)。 该header.xml是使用include-markup包含在Layouts中的。 例如,main.xml有以下行:

  

标题显示正常,但问题是 – 为标题中的按钮附加OnClickListeners的正确方法是什么?

克里斯托弗指出你可以创建一个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访问。 其次,这是正确的方法吗?

问候

setupHeaderButtons()方法protected因此只能通过extend该基类的类来访问它,在本例中是BaseActivity

您确定您的FirstActivity正在扩展BaseActivity吗?

我更喜欢这样,所以你不必记住(并且可能忘记)为每个派生的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); } } 

我个人认为你不应该过分复杂化。 必须调用setupHeaderButtons应该没问题,特别是如果你只有一些活动。

如果您使用的是标准启动模式,则会重新启动该活动。 如果您有兴趣了解启动模式,请查看应用基础知识 。