Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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 Android:为什么在这一部分(即MainActivity)中定义小部件会导致错误_Java_Android_Gradle - Fatal编程技术网

Java Android:为什么在这一部分(即MainActivity)中定义小部件会导致错误

Java Android:为什么在这一部分(即MainActivity)中定义小部件会导致错误,java,android,gradle,Java,Android,Gradle,如果我定义以下几行 myText =(TextView)findViewById(R.id.textView); button=(Button)findViewById(R.id.button); 在onCreate中,程序运行平稳,但如果在主活动中执行此操作,则会导致错误 import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import a

如果我定义以下几行

myText =(TextView)findViewById(R.id.textView); 
button=(Button)findViewById(R.id.button); 
onCreate
中,程序运行平稳,但如果在主活动中执行此操作,则会导致错误

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

public class MainActivity extends AppCompatActivity {

    myText =(TextView)findViewById(R.id.textView); //error 
    button=(Button)findViewById(R.id.button);

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



        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if(myText.getVisibility()==View.VISIBLE){

                    myText.setVisibility(View.INVISIBLE);
                }else
                {
                    myText.setVisibility(View.VISIBLE);
                }

            }
        });
    }
}
  • 你该走了

    myText =(TextView)findViewById(R.id.textView); 
    button=(Button)findViewById(R.id.button);
    
    要在
    setContentView
    之后创建
    onCreate
    method/after,否则将获得
    nullPointerException
    。初始化发生在
    onCreate
    方法中

  • 您必须定义小部件

     TextView myText =(TextView)findViewById(R.id.textView); 
     Button button=(Button)findViewById(R.id.button);
    
  • 编写此代码

    public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        myText =(TextView)findViewById(R.id.textView); //error 
        button=(Button)findViewById(R.id.button);
    
        button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           if(myText.getVisibility()==View.VISIBLE){
                 myText.setVisibility(View.INVISIBLE);
             }else
             {
                 myText.setVisibility(View.VISIBLE);
             }
            }
        });
    }
    }
    
    onCreate()
    中调用

    setContentView(R.layout.activity_main);
    
    只有在这一点上,活动才会有布局,而
    findViewById
    才有意义-它现在将递归地在
    R.layout.activity\u main
    中查找具有您要查找的ID的视图

    您在
    onCreate
    方法之外编写的代码在类实例化时运行,这对您没有帮助,因为在设置布局之前

    试着这样做:

    public class MyActivity ... {
      private TextView foo;
      private Button bar;
    
      @Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        foo = (TextView)findViewById(R.id.some_id);
        bar = (Button)findViewById(R.id.some_other_id);
    
        // ... can use foo and bar here and during the rest of the activity lifecycle
      }
    
      // ...
    }
    

    对于活动,findViewById从该活动的内容视图(使用setContentView设置)开始搜索,该活动是从布局资源膨胀的视图层次结构

    因此,在onCreate中调用setContentView之前,..findViewById无法工作


    Java在类加载时初始化类变量。如果您将“myText”和“button”作为类变量,并使用findViewById进行初始化,那么它将无法工作,因为还没有调用setContentView

    您正在尝试在将xml加载到activity中之前获取小部件的值。这些值无效,因为它们不是在方法内部完成的。…Write myText=(TextView)findViewById(R.id.TextView)//错误按钮=(按钮)findViewById(R.id.button);在设置内容视图后,在视图已知之前不能使用findViewById()。我已经做了,我需要一个原因为什么会发生这种情况???答案已更新。谢谢大家!!!!!!!!!!如果这个帮助的话,把这个标记为答案。