1. ホーム
  2. android

[解決済み] findViewById() がMainActivityクラスでない場合に動作しない。

2022-02-08 20:41:46

質問

Lyoutにテキストビューがあり、このテキストビューにテキストを設定したいのですが、どうすればよいでしょうか? これは、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);
    }
}

メインアクティビティクラスでこれをやっているとうまくいくのですが、他のクラスでやるとうまくいきません。

どうすればいいですか?

呼び出し findViewById() を実行します。 Activity オブジェクトは、現在の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);

レイアウトがアクティビティのメインレイアウトであることが想定されている場合、これを実行します。

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 ... 
  }
}