繁体   English   中英

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

[英]“Header” Views and buttons: how do I attach listeners to Buttons in a “header” that does not have its own Activity?

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


就目前而言,我正在编写的应用程序有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的正确方法是什么?

克里斯托弗指出你可以创建一个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应该没问题,特别是如果你只有一些活动。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM