从类中获取信息以在应用程序中运行

时间:2018-10-05 11:00:02

标签: java android class

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

我正在制作一个非常简单的应用程序,就像一个故事。它有8页和4个字符。每个字符都有一个图像,一个带其名称的按钮和一个textView。当您单击其按钮时,将显示其文本。

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

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

这应该意味着当按下“约翰”按钮时,他的文本变为可见,其他人消失了。

当我将其全部放在主活动类中时,它可以很好地工作,但是现在我将其放在自己的类中,当我运行它并按按钮时,我的应用程序就会关闭。

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

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

我已经将其他课程设置为extends mainActivity

到目前为止,我所做的全都是垃圾。我一直在尝试自己在Google上寻求帮助,但似乎对此感到困惑。

谢谢您的建议!

顺便说一句,我正在使用android studio

丹尼

1 个答案:

答案 0 :(得分:0)

首先:请始终共享您的错误日志,以获取快速,清晰的答案。

第二:我认为您的问题是您的活动中某些视图为空。您可以在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);
        }
    });