Android(在MainActivity之外创建ImageView)

一万年来谁著史,三千里外欲封侯。这篇文章主要讲述Android:在MainActivity之外创建ImageView相关的知识,希望能为你提供帮助。
我对android编程很新。现在,我正在尝试以编程方式创建ImageView。但不是在MainActivity中,而是在我创建的第二个类中。
这是我的代码:

package com.example.joystick; import android.app.Activity; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.RelativeLayout.LayoutParams; public class Joystick extends Activity{ImageView imView; RelativeLayout Layout; public void create(int x, int y, RelativeLayout layout) { Layout = layout; imView = new ImageView(this); imView.setImageResource(R.drawable.joystickknuppel); LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.setMargins(x, y, 0, 0); imView.setLayoutParams(params); Layout.addView(imView); }}

如果我将应用程序加载到我的设备,它会崩溃。但是如果我将“创建”方法复制到MainActivity中,它就可以正常工作。
有人能告诉我为什么会这样,以及如何解决它?
非常感谢!
答案操纵杆是活动吗?如果没有,则不需要扩展Activity而是传递当前活动的引用,然后在create方法中使用它。这是如何做。
public class Joystick {ImageView imView; RelativeLayout Layout; Activity activity; public JoyStick(Activity activity) { this.activity=activity; }public void create(int x, int y, RelativeLayout layout) { Layout = layout; //here's the change imView = new ImageView(activity); imView.setImageResource(R.drawable.joystickknuppel); LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutPa rams.WRAP_CONTENT); params.setMargins(x, y, 0, 0); imView.setLayoutParams(params); Layout.addView(imView); }}

您可以通过MainActivity访问它。
JoyStick joyStick=new JoyStick(this); //add your params joystick.create(x,y,relativeLayout);

另一答案用此代码替换此方法... onCreateView(...)
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); Layout = layout; imView = new ImageView(this); imView.setImageResource(R.drawable.joystickknuppel); params.setMargins(x, y, 0, 0); imView.setLayoutParams(params); Layout.addView(imView); return view; }

【Android(在MainActivity之外创建ImageView)】不要忘记初始化布局Layout
另一答案从onCreate调用此create方法,并将layout作为参数发送到此函数。实际上,您正在尝试访问尚未注册的视图。因此,在这种情况下,您将获得空指针异常。
另一答案您必须具有活动参考才能添加对该特定活动的控制
package com.example.joystick; import android.app.Activity; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.RelativeLayout.LayoutParams; public class Joystick{ImageView imView; RelativeLayout Layout; public void create(Activity act,int x, int y, RelativeLayout layout) { Layout = layout; imView = new ImageView(act); imView.setImageResource(R.drawable.joystickknuppel); LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.setMargins(x, y, 0, 0); imView.setLayoutParams(params); Layout.addView(imView); }}

如果你把'this'意味着它指向你的Joystick类,它扩展了Activity,但实际上并不是来自任何地方的Intent。从哪个Activity调用create mathod,你必须将'this'作为Activity参数传递。

    推荐阅读