从android中的超类继承数据

时间:2014-08-28 13:38:10

标签: java android

这是我的继承活动示例。如日志所示,我无法从超级班级获得正确的数据。

我的超级班

public class MainActivity extends Activity {

    public String exampleString;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Button button = (Button) findViewById(R.id.NewButton);
        button.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v){

            exampleString = "Test and test";    

            Log.e("Mytag", "here "+ exampleString);
            Intent intent = new Intent();
            intent.setClass(getBaseContext(), Activity2.class);
            startActivity(intent);              
        }
    });



}
}

我的子课

public class Activity2 extends MainActivity {

@Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout2);

        Log.e("Mytag", "here "+ exampleString);
}
}

我的日志

08-28 13:27:05.908: D/gralloc_goldfish(889): Emulator without GPU emulation detected.
08-28 13:27:08.677: E/Mytag(889): here Test and test
08-28 13:27:09.408: E/Mytag(889): here null

为什么子类为exampleString获取null值? 任何身体都能帮忙吗?感谢

2 个答案:

答案 0 :(得分:0)

因为当您实例化超类或其任何子类时,您将获得exampleString的新实例。

使变量成为静态,然后类将共享它。

public static String exampleString;

但是在您的示例中,您似乎只想将字符串发送到另一个活动,如下所示:

Intent intent = new Intent();
intent.putExtra("myString", "my example argument");
intent.setClass(getBaseContext(), Activity2.class);
startActivity(intent);

并在您的其他课程中收到:

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout2);

    Bundle args = getIntent().getExtras();
    String example = args.getString("myString");
    Log.e("Mytag", "here " + example);
}

Activity2将输出:here my example argument

答案 1 :(得分:0)

您在onClick方法中设置了exampleString变量。

当您在onClick方法中调用新活动时,您实际上正在创建一个新的Activity2实例。如果你从未将它设置在那里,为什么这个新实例在exampleString中有一个值?

继承是将功能和数据从超类扩展到子类的好方法,但决不允许单独的实例共享相同的数据。

由于在您的第二个实例中您从未设置exampleText,因此您的日志打印输出显示为null。