Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在方法中设置textview文本_Java_Android - Fatal编程技术网

Java 在方法中设置textview文本

Java 在方法中设置textview文本,java,android,Java,Android,我正在尝试创建一种确定游戏赢家的方法,而不担心找到赢家的逻辑 在代码中,我试图添加一个getWinner()方法,该方法将在计数器命中10个移动时确定胜利者。在getWinner()方法中,我使用textviewobjecttv并编写了tv.setText(“worked”);。应用程序将崩溃。如果我跳过添加getWinner()方法,直接在代码中加入tv.setText(),它仍然可以工作 因为我不确定我解释得有多好,也许我在整个代码中的注释可以更好地理解 public class MainA

我正在尝试创建一种确定游戏赢家的方法,而不担心找到赢家的逻辑

在代码中,我试图添加一个getWinner()方法,该方法将在计数器命中10个移动时确定胜利者。在getWinner()方法中,我使用
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对象
      • 您不能使用背景线程来设置文本,因此如果使用任何背景线程,请小心

      在全局范围内定义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");
          }
      }
      

      在全局上定义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