[英]Inherit data from super class in 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的空值? 有身體可以幫助嗎? 謝謝
因為當實例化您的超類或其任何子類時,您會獲得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
您正在onClick方法中設置exampleString變量。
當您在onClick方法中調用新活動時,實際上是在創建Activity2的新實例。 如果您從未在實例字符串中設置此新實例的值,為什么還要在其中呢?
繼承是將功能和數據從超類擴展到子類的一種好方法,但絕不允許單獨的實例共享同一數據。
由於在第二個實例中您從未設置exampleText,因此日志打印輸出顯示為空。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.