Java 在方法中设置textview文本
我正在尝试创建一种确定游戏赢家的方法,而不担心找到赢家的逻辑 在代码中,我试图添加一个getWinner()方法,该方法将在计数器命中10个移动时确定胜利者。在getWinner()方法中,我使用Java 在方法中设置textview文本,java,android,Java,Android,我正在尝试创建一种确定游戏赢家的方法,而不担心找到赢家的逻辑 在代码中,我试图添加一个getWinner()方法,该方法将在计数器命中10个移动时确定胜利者。在getWinner()方法中,我使用textviewobjecttv并编写了tv.setText(“worked”);。应用程序将崩溃。如果我跳过添加getWinner()方法,直接在代码中加入tv.setText(),它仍然可以工作 因为我不确定我解释得有多好,也许我在整个代码中的注释可以更好地理解 public class MainA
textview
objecttv并编写了tv.setText(“worked”);。应用程序将崩溃。如果我跳过添加getWinner()方法,直接在代码中加入tv.setText(),它仍然可以工作
因为我不确定我解释得有多好,也许我在整个代码中的注释可以更好地理解
public class MainActivity extends AppCompatActivity {
public int counter = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button button1 = (Button) findViewById(R.id.button1);
final Button button2 = (Button) findViewById(R.id.button2);
final Button button3 = (Button) findViewById(R.id.button3);
final Button button4 = (Button) findViewById(R.id.button4);
final Button button5 = (Button) findViewById(R.id.button5);
final Button button6 = (Button) findViewById(R.id.button6);
final Button button7 = (Button) findViewById(R.id.button7);
final Button button8 = (Button) findViewById(R.id.button8);
final Button button9 = (Button) findViewById(R.id.button9);
final TextView tv = (TextView) findViewById(R.id.winnerTextView);
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (counter % 2 == 0) {
button1.setText("O");
}
else
{
button1.setText("X");
}
counter++;
if (counter == 10)
{
//getWinner(); ---this does not work
//tv.setText("works"); ---this works
}
}
});
button2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (counter % 2 == 0) {
button2.setText("O");
}
else
{
button2.setText("X");
}
counter++;
if (counter == 10)
{
//getWinner(); ---this does not work
//tv.setText("works"); ---this works
}
}
});
button3.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (counter % 2 == 0) {
button3.setText("O");
}
else
{
button3.setText("X");
}
counter++;
if (counter == 10)
{
//getWinner(); ---this does not work
//tv.setText("works"); ---this works
}
}
});
button4.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (counter % 2 == 0) {
button4.setText("O");
}
else
{
button4.setText("X");
}
counter++;
if (counter == 10)
{
//getWinner(); ---this does not work
//tv.setText("works"); ---this works
}
}
});
button5.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (counter % 2 == 0) {
button5.setText("O");
}
else
{
button5.setText("X");
}
counter++;
if (counter == 10)
{
//getWinner(); ---this does not work
//tv.setText("works"); ---this works
}
}
});
button6.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (counter % 2 == 0) {
button6.setText("O");
}
else
{
button6.setText("X");
}
counter++;
if (counter == 10)
{
//getWinner(); ---this does not work
//tv.setText("works"); ---this works
}
}
});
button7.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (counter % 2 == 0) {
button7.setText("O");
}
else
{
button7.setText("X");
}
counter++;
if (counter == 10)
{
//getWinner(); ---this does not work
//tv.setText("works"); ---this works
}
}
});
button8.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (counter % 2 == 0) {
button8.setText("O");
}
else
{
button8.setText("X");
}
counter++;
if (counter == 10)
{
//getWinner();
}
}
});
button9.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (counter % 2 == 0) {
button9.setText("O");
}
else
{
button9.setText("X");
}
counter++;
if (counter == 10)
{
//getWinner(); ---this does not work
//tv.setText("works"); ---this works
}
}
});
/**
public void getWinner() {
tv.setText("does not work");
}
**/
}
}
尝试将getWinner()方法放在onCreate()函数之外,并将textView引用传递给它
我想它应该会起作用。将getWinner()方法放在onCreate()函数之外,然后将textView引用传递给它
我想它应该可以工作。尝试将textview obj传递给方法getWinner,然后尝试设置它。getWinner应该在oncreate方法之外。尝试将textview obj传递给方法getWinner,然后尝试设置它。getWinner应该在oncreate方法之外。您可以做的是
- 全局声明TextView对象
- 您不能使用背景线程来设置文本,因此如果使用任何背景线程,请小心
- 全局声明TextView对象
- 您不能使用背景线程来设置文本,因此如果使用任何背景线程,请小心
- 您可以做的是
public class MainActivity extends AppCompatActivity {
public int counter = 1;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button button1 = (Button) findViewById(R.id.button1);
final Button button2 = (Button) findViewById(R.id.button2);
final Button button3 = (Button) findViewById(R.id.button3);
final Button button4 = (Button) findViewById(R.id.button4);
final Button button5 = (Button) findViewById(R.id.button5);
final Button button6 = (Button) findViewById(R.id.button6);
final Button button7 = (Button) findViewById(R.id.button7);
final Button button8 = (Button) findViewById(R.id.button8);
final Button button9 = (Button) findViewById(R.id.button9);
tv = (TextView) findViewById(R.id.winnerTextView);
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (counter % 2 == 0) {
button1.setText("O");
}
else
{
button1.setText("X");
}
counter++;
if (counter == 10)
{
getWinner();
}
}
});
}
public void getWinner() {
tv.setText("does not work");
}
}
在全局上定义tv,无需在创建时将getWinner()放入,因此可以将其取出
public class MainActivity extends AppCompatActivity {
public int counter = 1;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button button1 = (Button) findViewById(R.id.button1);
final Button button2 = (Button) findViewById(R.id.button2);
final Button button3 = (Button) findViewById(R.id.button3);
final Button button4 = (Button) findViewById(R.id.button4);
final Button button5 = (Button) findViewById(R.id.button5);
final Button button6 = (Button) findViewById(R.id.button6);
final Button button7 = (Button) findViewById(R.id.button7);
final Button button8 = (Button) findViewById(R.id.button8);
final Button button9 = (Button) findViewById(R.id.button9);
tv = (TextView) findViewById(R.id.winnerTextView);
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (counter % 2 == 0) {
button1.setText("O");
}
else
{
button1.setText("X");
}
counter++;
if (counter == 10)
{
getWinner();
}
}
});
}
public void getWinner() {
tv.setText("does not work");
}
}
将getWinner()方法置于onCreate()之外,并将tv设置为全局变量。它应该可以工作。将getWinner()方法置于onCreate()之外,并将tv设置为全局变量。它应该可以工作。正如其他答案所指出的,您正在一个方法中创建一个方法,该方法是一个代码错误,并且您正在尝试访问另一个方法中的变量,该方法是一个方法范围 首先,我们需要解决第一个问题 如果我们简化您的代码,它将是这样的
public class MainActivity extends AppCompatActivity {
public int counter = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button button1 = (Button) findViewById(R.id.button1);
// get all the view.
final TextView tv = (TextView) findViewById(R.id.winnerTextView);
button1.setOnClickListener(listener);
button2.setOnClickListener(listener);
button3.setOnClickListener(listener);
button4.setOnClickListener(listener);
button5.setOnClickListener(listener);
button6.setOnClickListener(listener);
button7.setOnClickListener(listener);
button8.setOnClickListener(listener);
button9.setOnClickListener(listener);
/**
public void getWinner() {
tv.setText("does not work");
}
**/
}
}
从上面的代码中,您可以看到您试图在onCreate()
的内部创建getWinner()
,这是错误的
应该是:
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
final TextView tv = (TextView) findViewById(R.id.winnerTextView);
}
public void getWinner() {
tv.setText("does not work");
}
}
现在代码正在工作,但它会给您一个错误,因为getWinner()
找不到tv变量
,该变量仅在onCreate()方法中。因此,您需要将其作为一个类范围,如下所示:
public class MainActivity extends AppCompatActivity {
// make it class scope.
private TextView tv;
protected void onCreate(Bundle savedInstanceState) {
...
TextView tv = (TextView) findViewById(R.id.winnerTextView);
...
}
public void getWinner() {
tv.setText("does not work");
}
}
这两个问题的发生都是因为您正在创建一个代码行过多的方法。您应该始终使您的方法不超过15行。这是使代码在将来更易于维护的最佳实践
不要在一个方法中使用太多逻辑。只关注解决方法中的一个问题。始终使用Divide et impera
主体将较大的问题划分为许多较小的问题。正如其他答案所指出的,您在一个方法中创建了一个方法,该方法是一个代码错误,并且您试图访问另一个方法中的变量,该方法是一个方法范围
首先,我们需要解决第一个问题
如果我们简化您的代码,它将是这样的
public class MainActivity extends AppCompatActivity {
public int counter = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button button1 = (Button) findViewById(R.id.button1);
// get all the view.
final TextView tv = (TextView) findViewById(R.id.winnerTextView);
button1.setOnClickListener(listener);
button2.setOnClickListener(listener);
button3.setOnClickListener(listener);
button4.setOnClickListener(listener);
button5.setOnClickListener(listener);
button6.setOnClickListener(listener);
button7.setOnClickListener(listener);
button8.setOnClickListener(listener);
button9.setOnClickListener(listener);
/**
public void getWinner() {
tv.setText("does not work");
}
**/
}
}
从上面的代码中,您可以看到您试图在onCreate()
的内部创建getWinner()
,这是错误的
应该是:
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
final TextView tv = (TextView) findViewById(R.id.winnerTextView);
}
public void getWinner() {
tv.setText("does not work");
}
}
现在代码正在工作,但它会给您一个错误,因为getWinner()
找不到tv变量
,该变量仅在onCreate()方法中。因此,您需要将其作为一个类范围,如下所示:
public class MainActivity extends AppCompatActivity {
// make it class scope.
private TextView tv;
protected void onCreate(Bundle savedInstanceState) {
...
TextView tv = (TextView) findViewById(R.id.winnerTextView);
...
}
public void getWinner() {
tv.setText("does not work");
}
}
这两个问题的发生都是因为您正在创建一个代码行过多的方法。您应该始终使您的方法不超过15行。这是使代码在将来更易于维护的最佳实践
不要在一个方法中使用太多逻辑。只关注解决方法中的一个问题。始终使用Divide et impera
原则将较大的问题划分为许多较小的问题。@IntelliJAmiya assuming您的意思是错误吗?@IntelliJAmiya 1:32 AM渐变构建在1秒123ms 1:32 AM PSI中完成,有4个错误,索引不匹配:PSI和索引不匹配match@IntelliJAmiya别以为那是你想要的,当我将鼠标悬停在getWinner()上时;它表示无法解析方法。@IntelliJAmiya假设您是指错误?@IntelliJAmiya 1:32 AM Gradle build在1秒123ms 1:32 AM PSI和索引不匹配时出现4个错误:PSI和索引不匹配match@IntelliJAmiya当我将鼠标悬停在getWinner()上时,不要以为这就是你想要的;它说方法无法解析。感谢您添加的详细信息。感谢您添加的详细信息。onne podoooooonne podoooooo