簡體   English   中英

從Android中的超類繼承數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM