Android:在MainActivity之外创建ImageView

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}

不要忘记初始化布局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参数传递。

以上是关于Android:在MainActivity之外创建ImageView的主要内容,如果未能解决你的问题,请参考以下文章

MainActivity 中的 Android 类没有收到来自警报管理器的广播

JAVA Eclipse创建Android程序如何实现MainActivity和Fragment相互传递数据

Android:onResume() 正在跳转到除异常之外的另一个活动

新建android工程的时候eclipse没有生成MainActivity和layout布局

Android:如果用户没有完成注册,他仍然可以进入 MainActivity

Android App 无法运行,MainActivity 出现空点异常