【问题标题】:Getting information from classes to run in an app从类中获取信息以在应用程序中运行
【发布时间】:2018-10-05 11:00:02
【问题描述】:

到目前为止,我只是将所有代码放在一个主要的 Activity 类中。我现在正在尝试改进这一点并开设不同的课程。

我正在制作一个非常简单的应用程序,就像一个故事。有 8 页和 4 个字符。每个角色都有一个图像、一个带有名字的按钮和一个 textView。当你点击他们的按钮时,他们的文字就会显示出来。

我为每个角色创建了一个类,并在其中放置了与该角色相关的所有方法。即,

public void johnSpeak1 (View view) {
   johnText1.setVisibility(View.VISIBLE)
   markText1.setVisibility(View.INVISIBLE)
}

这应该意味着当按下 John 按钮时,他的文字变得可见,而其他人消失。

当我把它全部放在主活动类中时它工作正常,但现在我把它放在它自己的类中,当我运行它并按下按钮时我的应用程序就会关闭。

我已经在主要活动中声明了所有按钮和textviews。在主要活动的oncreate 中,我为第一页提供了所有findviewbyID,并将textViews 设置为不可见。

到目前为止,我所学到的一切都来自 Udemy 的视频,该视频很棒,但从未提及课程!

我已将我所做的其他课程设置为extends mainActivity

到目前为止,我所做的一切都可能是垃圾。我一直在尝试自己做这件事,在谷歌上寻求帮助,但我似乎对此感到困惑。

感谢您的建议!

顺便说一句,我正在使用安卓工作室

丹尼

【问题讨论】:

    标签: java android class


    【解决方案1】:

    首先:请始终分享您的错误日志以获得快速明确的答案。

    第二:我认为您的问题是您的活动中的某些视图为空。您可以在view>toolwindows>logcat中找到,在应用程序崩溃后您会看到一个错误列表,其中一部分有指向错误原因的链接!

    编辑: 例如,您为每个角色创建一个类:

    public class John extends LinearLayout
    {
        Context context;
        public John(Context context) {
            super(context);
            this.context = context;
            init();            
        }
    
        public John(Context context, @Nullable AttributeSet attrs) {
            super(context, attrs);
            this.context = context;
            init();
        }
    
        public John(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            this.context = context;
            init();
        }
        TextView dialog;
        private void init()
        {
            View view = LayoutInflater.from(context).inflate(R.layout.john_layout, this);
            dialog = view.findViewById(R.id.dialog);
        }
    
        public void setShowHideDialog(boolean mustShow)
        {
            if(mustShow)
                dialog.setVisibility(VISIBLE);
            else 
                dialog.setVisibility(GONE);
        }
    }
    

    在 john_layout xml 中放入 ImageView 和 TextView 并使用您的角色的图像和对话框设置它们

    然后在您的 Activity xml 中添加 john_layout,如下所示:

    <John android:layout_width="wrap_content" 
          android:layout_height="wrap_content"
    android:id="@+id/ch_john"/>
    

    最后在你的活动中这样使用 John:

    final John john = findViewById(R.id.ch_john);
        john.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mark.setShowHideDialog(false);
                john.setShowHideDialog(true);
            }
        });
    

    【讨论】:

    • 谢谢,logcat 说在父或祖先上下文中找不到方法。我对 Java 很陌生,不确定这意味着什么。正如我所说,我以前从未使用过课程。所以我不确定该放什么。
    猜你喜欢
    • 2017-03-06
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    相关资源
    最近更新 更多