我对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中,它就可以正常工作。
有人可以告诉我为什么会这样,以及如何解决它?
非常感谢!
答案 0 :(得分:2)
将此方法替换为此代码... 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;
}
不要忘记初始化布局Layout
答案 1 :(得分:1)
操纵杆是活动吗?如果没有,则不需要扩展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);
答案 2 :(得分:0)
从onCreate调用此create方法,并将layout作为参数发送到此函数。实际上,您正在尝试访问尚未注册的视图。因此,在这种情况下,您将获得空指针异常。
答案 3 :(得分:0)
您必须具有活动参考,才能对该活动进行控制
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调用创建方法,必须在其中传递“ this”作为Activity参数。