Android-为什么调用另外一个Activity中的控件会报空指针?

Web程序数据库 Web程序数据库 主题:1214 回复:2505

Android-为什么调用另外一个Activity中的控件会报空指针?

瑾兮 发布于 2017-04-21 字数 487 浏览 1238 回复 4

现在有Activity A和B,其中A有一个公开的TextView,然后我在B中new一个A然后设置这个TextView,这样貌似不行?会报空指针错误.是我调用的方法错误了吗?
A a=new A();
a.TextView.setText("");
这样的调用方法不对吗?
为什么会报空指针错误?

======================================================
我选择了自己为最佳答案是因为我的需求是基于我的开发为TabActivity的.因此广播这种方式更为适合.否则可以使用@还算正常 的答案

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(4

泛泛之交 2017-07-09 4 楼

呃。。。。我不太清楚你Activity A 和 B的用途。
1、如果是只是单纯的B创建A对象。。然后修改A中TextView控件,这样对于代码上来说应该是没有错误的。

2、从Activity A跳转到B,然后在B中修改内容;再结果返回显示到 A的TextView。
我建议你:a、使用Activity的startActivityForResult的方法。。
b、或者看Activity的生命周期,将重置A的TextView的操作代码,放置到restart中。

甜柠檬 2017-07-06 3 楼

可以采用方法回调的方式:

// activity 之间方法调用的桥梁

public class ActivityCallBridge {

static ActivityCallBridge mBridge;

private OnMethodCallback mCallback;

private ActivityCallBridge() {

}

public static ActivityCallBridge getInstance() {
    if (mBridge == null) {
        mBridge = new ActivityCallBridge();
    }
    return mBridge;
}

public void invokeMethod() {
    if (mCallback != null) {
        mCallback.doMethod();
    }
}

public void setOnMethodCallback(OnMethodCallback callback) {
    mCallback = callback;
}

public static interface OnMethodCallback {
    public void doMethod();
}

}

如果你要 B 去调用 A 的一个方法, 你可以让 A 实现 OnMethodCallback 接口,然后在 B 里面调用 invokeMethod 方法来完成回调:

// A 实现调用接口
public class AActivity extends Activity implements ActivityCallBridge.OnMethodCallback {

private ActivityCallBridge mBridge;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mBridge = ActivityCallBridge.getInstance();
    mBridge.setOnMethodCallback(this);
}

@Override
public void doMethod() {

}

}

 //B 调用接口
public class BActivity extends Activity {
private ActivityCallBridge mBridge;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mBridge = ActivityCallBridge.getInstance();
    mBridge.invokeMethod();
}

}

浮生未歇 2017-06-27 2 楼

因为我看见高手说Activity是不能够构造的,所以无法实现这一种外部调用,所以指点我用广播机制来实现我需要的功能,通过B发送广播来操作A的变化,经过实验,我觉得比我用这种调用外部类的方法更加方便好使.所以我最终使用了广播机制来实现我需要的功能

晚风撩人 2017-05-24 1 楼

你在A那边的TextView实现了吗,比如A,B,C三个类 在A里声明了一个全局的B,但是没有new它
然后你在C那边new了A调用到了B,然后调用B的方法 这样也报空指针。