findViewById()不在非MainActivity类中工作

Mil*_*loš 25 android android-view

我在Lyout中有一个文本视图,我想在这个textview中设置一些文本.这应该在一个不是MainActivity类的类中进行.

问题是我得到了一个空指针异常.

这是我的代码:

public class UserInformations extends Activity{

TextView emailTextView;
LocalDatabase localdatabase= new LocalDatabase(this);


    public void getUserInformation()
    {
    emailTextView = (TextView) findViewById(R.id.EmailTextView);
    String email = localdatabase.getUserEmail();
    emailTextView.setText(email);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在Main Activity类中执行此操作时,它可以正常工作,但它不适用于其他类.

Dee*_*eeV 38

只有当前的Activity布局设置时,才能调用findViewById()Activity对象setContentView.如果通过其他方式添加布局,则需要View布局对象并对其进行调用findViewById().

View v = inflater.inflate(id_number_of_layout); # such as R.layout.activity_main
View innerView = v.findViewById(id_number_of_view_inside_v);
Run Code Online (Sandbox Code Playgroud)

如果布局应该是活动的主要布局,那么执行以下操作:

public class MyActivity extends Activity{
  TextView emailTextView; 

  @Override
  public void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
     setContentView(id_number_of_layout);
     emailTextView = (TextView) findViewById(R.id.EmailTextView);
     // ... whatever other set up you need to do ...
  }

  public void getUserInformation() {
     // .... regular code ... 
  }
}
Run Code Online (Sandbox Code Playgroud)


Fab*_*ook 6

您还没有设置内容View?


要做到这一点,请使用以下内容:

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


    }


}
Run Code Online (Sandbox Code Playgroud)


m0s*_*it0 5

findViewById(R.id.EmailTextView);
Run Code Online (Sandbox Code Playgroud)

你要么

  1. 没有设置视图布局
  2. 没有具有ID EmailTextView的View,因此findViewById返回null.您不必将类型,而是您在XML中提供的ID.

编辑:根据您的新评论肯定是1.