我有一个正常的课程(不是活动)。在那个类中,我引用了一个活动。现在我想访问该活动的布局 xml 中包含的视图(以添加一个子项)。我不知道该活动的布局文件的名称。我只知道要访问的视图的 ID(例如:R.id.my_view)。
我怎样才能做到这一点?
我有一个正常的课程(不是活动)。在那个类中,我引用了一个活动。现在我想访问该活动的布局 xml 中包含的视图(以添加一个子项)。我不知道该活动的布局文件的名称。我只知道要访问的视图的 ID(例如:R.id.my_view)。
我怎样才能做到这一点?
就如此容易!
View view = activity.findViewById(R.id.my_view);
在布局的情况下:
LinearLayout layout = (LinearLayout) activity.findViewById(R.id.my_layoutId);
并添加视图:
layout.addView(view);
关于 NullPointerException (您应该添加到问题中),请始终确保您在尝试访问 XML 中定义的视图之前已在 Activity 中调用了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。
您可以让您的方法接受一个 Activity 参数,然后使用它通过 id 查找视图。
前任:
public class MyClass{
public void doSomething(Activity context){
TextView text=(TextView)context.findViewById(R.id.my_textview);
}
}
然后在您的活动中:
obj.doSomething(YourActivity.this);