私は通常のクラスを持っています(活動ではありません)。そのクラス内には、アクティビティへの参照があります。ここで、そのアクティビティのレイアウト xml に含まれるビューに (子を追加するために) アクセスしたいと考えています。そのアクティビティのレイアウト ファイルの名前がわかりません。アクセスしたいビューの ID しか知りません (例: R.id.my_view)。
どうやってやるの?
私は通常のクラスを持っています(活動ではありません)。そのクラス内には、アクティビティへの参照があります。ここで、そのアクティビティのレイアウト xml に含まれるビューに (子を追加するために) アクセスしたいと考えています。そのアクティビティのレイアウト ファイルの名前がわかりません。アクセスしたいビューの ID しか知りません (例: R.id.my_view)。
どうやってやるの?
NullPointerException (質問に追加する必要があります) に関しては、XML で定義されたビューにアクセスする前に、アクティビティでsetContentView()を呼び出したことを常に確認してください。使用例:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
}
...
}
すると、どこかで、
ViewGroup group = (ViewGroup) context.findViewById(R.id.group); // In your example, R.id.my_view
setContentView() を呼び出す必要があるのは、呼び出される前に View(Group) が存在しないためです。find ViewById() は存在しないものを見つけることができないため、 null を返します。
それと同じくらい簡単です!
View view = activity.findViewById(R.id.my_view);
レイアウトの場合:
LinearLayout layout = (LinearLayout) activity.findViewById(R.id.my_layoutId);
ビューを追加するには:
layout.addView(view);
メソッドにActivityパラメーターを受け入れさせ、それを使用してIDでビューを検索することができます。
元:
public class MyClass{
public void doSomething(Activity context){
TextView text=(TextView)context.findViewById(R.id.my_textview);
}
}
それからあなたの活動で:
obj.doSomething(YourActivity.this);