gpt4 book ai didi

java - 声明如何以及在哪里可以被 Android Studio 中的两种方法使用

转载 作者:行者123 更新时间:2023-12-01 21:59:19 25 4
gpt4 key购买 nike

我是 Java 和 Android Studio 的新手,所以仍在学习,如果这个问题过于简单,我很抱歉。我最近发现,作为在 Activity.java 文件中编码 onClickListener 来响应按钮单击的替代方法,可以使用 android:onClick="方法名称"中的 android:onClick="方法名称"来更简单地完成此操作相应的layout.xml文件。我已经查看了该网站有关每种方法的优缺点的问题,但这不是我的问题。我的问题是,在哪里以及如何声明由两个方法使用的文本字段,而不必在每个方法中声明它?接下来的代码尽可能少。有两个按钮和一个 TextView 。如果我尝试输入“TextView messages = (TextView) findViewById(R.id.message);”除了这两种方法之外的任何地方,我都会收到可怕的“尝试在空对象引用上调用虚拟方法'android.view.View android.view.Window.findViewById(int)'”。是否有任何地方和任何方法可以做出可由两种方法使用的单个声明而不生成此异常?

从 .xml 文件中提取

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me"
android:id="@+id/topbutton"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="88dp"
android:onClick="doit"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="***"
android:id="@+id/message"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"/>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Again"
android:id="@+id/againbutton"
android:layout_below="@+id/message"
android:layout_centerHorizontal="true"
android:layout_marginTop="63dp"
android:onClick="starit"/>

.java 文件的顶端摘录

package com.example.owner.clickme;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void doit (View v)
{
TextView themessage = (TextView) findViewById(R.id.message);
themessage.setText("Well clicked, Sir!");
}

public void starit (View v)
{
TextView themessage = (TextView) findViewById(R.id.message);
themessage.setText("****");
}
.
. etc.

最佳答案

Android 中的常见做法是在 onCreate 中实例化任何 View ,或者在主内容 View 中进行扩展。

因此,在 MainActivity 中创建一个字段,如下所示

private TextView themessage;

onCreate内获取TextView

theMessage = (TextView) findViewById(R.id.message);

然后您就可以在这两种方法中自由使用theMessage

<小时/>

总而言之,看起来像这样

public class MainActivity extends AppCompatActivity
{
private TextView themessage;

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

themessage = (TextView) findViewById(R.id.message);
}

public void doit (View v)
{
themessage.setText("Well clicked, Sir!");
}

public void starit (View v)
{
themessage.setText("****");
}
}

关于java - 声明如何以及在哪里可以被 Android Studio 中的两种方法使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33850283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com