【问题标题】:Substitution for extending multiple classes in Java在 Java 中扩展多个类的替代
【发布时间】:2016-01-15 15:20:03
【问题描述】:

当我添加一个只支持扩展 ActivityFragment 类的类的投射按钮时,我发现这很困难,因为我感兴趣的特定类已经扩展了另一个 LinearLayout 类。为了避免创建自定义按钮,我做了以下解决方法,

public class metaView extends LinearLayout {
    private FragmentActivity fragmentActivity;
    private void initViews() {
        fragmentActivity = new FragmentActivity(){
            @Override
            protected void onCreate(Bundle savedInstanceState){
                    //Create Button Discovery...

            }
        };
    }
}

但是,似乎从未调用过覆盖的方法 onCreate。有没有人看到这个替代方案的问题?或者这根本行不通?

提前致谢!

【问题讨论】:

  • 我不熟悉 Android 生命周期,但它可能与调用方法的事件顺序有关。例如,如果在调用 initViews() 之前访问了 fragmentActivity 变量,那么该对象还没有被创建,因此不会定义被覆盖的方法。你试过调试这个吗?
  • 好吧,从技术上讲,我不知道如何访问 fragmentActivity 或调用 onCreate() 的方法。但是,是的,如果之前访问过它,我会期待一个空引用 ex。什么应该调用 onCreate()?
  • 如果您从未在任何地方使用 FragmentActivity,那您为什么要创建一个?我对你真正想要做什么感到困惑。
  • 查看:stackoverflow.com/questions/7475356/…。手动实例化对象时显然不会调用 onCreate。
  • 好吧,听起来您实际上需要在 FragmentActivity 中显示您的内容,并在其中使用 LinearLayout 来实际放置内容。您在代码中所做的事情没有多大意义。您通常不会从布局构建活动。为什么不能只在用于实际显示内容的 Activity 中设置回调?

标签: java android inheritance multiple-inheritance chromecast


【解决方案1】:

当我添加一个只支持扩展 ActivityFragment 类的类的投射按钮时

这没有任何意义。无论如何,您不能创建和使用匿名 Activity 实例。您的布局应该可配置为显示/隐藏按钮,并提供一个界面来处理按钮的点击。例如,您的 MetaView 类可能有这样的内容:

public interface OnCastButtonClickedListener {
    void onCastButtonClicked();
}

public void setCastButtonEnabled(boolean enabled) {
    // Turn it on or off
}

public void setOnCastButtonClickedListener(OnCastButtonClickedListener l) {
    // Assign some listener to delegate the button click to.
}

然后,任何使用布局的 Activity 都将负责显示/隐藏投射按钮,并处理点击事件。

【讨论】:

猜你喜欢
  • 2013-04-19
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
相关资源
最近更新 更多