0

我想使用按钮单击将选择参数传递给另一个类,该类将使用传递的参数构建地图屏幕。我专注于让我的按钮动作正常工作。我使用 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) 移动到 onCreate 时,我得到了 NullPointerException。

我已经尝试了其他几种方法来解决这个问题,但这似乎是最好的,而且我似乎已经接近解决了。我真的很感激对我可能遗漏的东西的解释。添加了最初未复制的代码。

4

2 回答 2

3

要扩展@Heiko Rupp 的答案,如果要Class2显示地图,它需要扩展类似Activity. 因此,您不能只使用普通方法调用它。您需要Activity在清单中注册 ,然后使用Intent. 这是您应该做的事情的示例:

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");
            ...
        }
        ...
    }
}

我还可以建议您使用比Class1and更具描述性的类名吗Class2

于 2011-02-04T21:18:41.940 回答
2

Class2是没有活动的,所以系统不会调用活动的回调。

如果它是一个Activity,你不能只是通过调用它new Class2(),因为仍然没有执行回调。

尝试清理它,然后从 Class1 开始 Class2 活动,Intent就像你在execMapBuild().

于 2011-02-04T20:50:24.307 回答