Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用onClickView调用另一个类_Android_Button_Oncreate - Fatal编程技术网

Android 使用onClickView调用另一个类

Android 使用onClickView调用另一个类,android,button,oncreate,Android,Button,Oncreate,我想使用按钮单击将选择参数传递给另一个类,该类将使用传递的参数构建地图屏幕。我专注于让我的按钮动作发挥作用。我使用onCLickListener和onCLickView创建了一个数据库,如下所示 Class1: public class Class1 extends Activity implements OnClickListener { Class2 class2; protected void onCreate(Bundle savedInstanceState)

我想使用按钮单击将选择参数传递给另一个类,该类将使用传递的参数构建地图屏幕。我专注于让我的按钮动作发挥作用。我使用onCLickListener和onCLickView创建了一个数据库,如下所示

Class1:

public class Class1  extends Activity implements OnClickListener {

    Class2 class2;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

..........

       Button button = (Button)findViewById(R.id.btn_configup1);
        button.setOnClickListener(this);        
   }

    public void onClick(View v) {
        Class2 class2 = new Class2();
        //Save state.. selections and params and use bundle
        //to pass into class2
        class2.execMapBuild();

    }    


}


Class2:
公共类Class2扩展了MapActivity{

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.drawable.navup);
}


public void execMapBuild() {    
        finish(); //just in case we return.
        Intent intent = new Intent(CLass2.this, Class2.class);
        startActivity(intent);

    }
除了所需的按钮操作之外,我的一切都正常工作。我希望Class1.onVlickView中的按钮单击使用按钮单击操作调用Class2.execMapBuild。我让按钮单击捕获操作并调用Class2上的execMapBuild方法。但是,当它从startActivity(intent)移动时,我得到一个NullPointerException进入onCreate

我已经尝试过其他几种方法来解决这个问题,但这似乎是最好的,我似乎很快就能找到答案。如果能解释一下我可能遗漏了什么,我将不胜感激。
添加了最初未复制的代码。

Class2
不是活动,因此系统不会调用活动的回调

如果它是一个
活动
,您不能仅仅通过
newclass2()
调用它,因为回调仍然没有执行


尝试清理此问题,然后从Class1开始具有
意图的Class2活动,就像您在
execMapBuild()
Class2
中所做的那样,系统不会调用活动的回调

如果它是一个
活动
,您不能仅仅通过
newclass2()
调用它,因为回调仍然没有执行


尝试清理这个问题,然后像您在
execMapBuild()中所做的那样,以
Intent
从Class1开始Class2活动

要扩展@Heiko Rupp的答案,如果你想
Class2
显示一个地图,它需要扩展类似
活动
的东西。因此,你不能只使用普通方法调用它。你需要在清单中注册
活动
,然后使用
意图
调用它。下面是你应该做的事情:

public class Class1 extends Activity implements OnClickListener {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        Button button = (Button)findViewById(R.id.btn_configup1);
        button.setOnClickListener(this);        
   }

    public void onClick(View v) {
        Intent intent = new Intent(Class1.this,Class2.class);
        intent.putExtra("key","data");
        ...
        startActivity(intent);
    }
}

public class Class2  extends MapActivity {

    String mData;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            mData = extras.getString("key");
            ...
        }
        ...
    }
}

我还可以建议您使用比
Class1
Class2
更多的描述性类名来扩展@Heiko Rupp的答案吗?如果您想
Class2
显示地图,它需要扩展类似
活动的内容。因此,您不能用普通方法调用它。您需要注册
活动
,然后使用
意图调用它。以下是您应该做的事情的示例:

public class Class1 extends Activity implements OnClickListener {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        Button button = (Button)findViewById(R.id.btn_configup1);
        button.setOnClickListener(this);        
   }

    public void onClick(View v) {
        Intent intent = new Intent(Class1.this,Class2.class);
        intent.putExtra("key","data");
        ...
        startActivity(intent);
    }
}

public class Class2  extends MapActivity {

    String mData;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            mData = extras.getString("key");
            ...
        }
        ...
    }
}

我还建议您使用比
Class1
Class2
更多的描述性类名,这是我把代码复制到窗口中的错误。Class2在我的实际代码中扩展了MapActivity。同样的原则也适用,您不能直接使用
new
关键字实例化它,也不能直接调用Its方法。您需要创建
Intent
并调用
startActivity()
。实际上,Class2扩展了MapActivity。我在问题中替换了Class1和Class2以使其更干净。我真的想知道从Class1.onClickView到Class2.execMapBuild的最佳方法是什么。在execMapBuild中,我将为我的ItemizedOverlay创建数据。一旦完成,我想转到onCreate。希望我不会感到困惑查看上面我的初始代码块。我正在使用startActivity(intent);好了。这就是我第一次做的。你不能使用
new
关键字来实例化属于
活动
子类的类的实例。它不起作用。请不要尝试。因为你不能创建实例,所以你不能从另一个类调用你的
execMapBuild
方法。你需要使用
Intent
Extras
将数据从第一个
活动传递到第二个
活动(如上所述),然后在第二个
活动
onCreate
方法中创建数据。这是我把代码复制到窗口中的错误。Class2在我的实际代码中扩展了MapActivity。同样的原则也适用,你不能使用
new
关键字直接实例化它,也不能直接调用它的方法。哟你需要创建一个
Intent
并调用
startActivity()
。实际上,Class2扩展了MapActivity。我在问题中替换了Class1和Class2以使其更干净。我真的想知道从Class1.onClickView到Class2.execMapBuild的最佳方法是什么。在execMapBuild中,我将为我的ItemizedOverlay创建数据。一旦完成,我想转到onCreate。希望我不会感到困惑查看上面我的初始代码块。我正在使用startActivity(intent);好了。这就是我第一次做的。你不能使用
new
关键字来实例化属于
活动
子类的类的实例。它不起作用。请不要尝试。因为你不能创建实例,所以你不能从另一个类调用你的
execMapBuild
方法。你需要使用
Intent
Extras
将数据从第一个
活动
传递到第二个
活动(如上所述),然后在第二个
活动
onCreate
方法中创建数据。我会尝试一下。我明白你的意思。我可以在startActivity()之后将所有内容都导入execBuildMapintent it excepts with a NUllPointerException我将尝试此操作。我明白你的意思。我可以将所有内容跟踪到execBuildMap,但在startActivity()之后,intent it excepts with a NUllPointerException