2014-08-28 116 views
0

這裏是我的繼承活動的例子。由於日誌顯示我無法從我的超類中獲取正確的數據。從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空值? 任何身體可以幫助嗎?謝謝

回答

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

活性2將輸出:here my example argument

+0

就是這樣。我完全是java的新手。謝謝隊友 – WenhaoWu 2014-08-28 13:43:46

+0

@文豪武請閱讀更新的答案。 – Simas 2014-08-28 13:46:00

+0

再次感謝您。是的,這樣可以節省繼承時間。 – WenhaoWu 2014-08-28 13:55:43

0

你正在設置onClick的exampleString變量方法。

當您在onClick方法中調用新活動時,實際上是在創建一個Activity2的新實例。爲什麼這個新實例在exampleString中有一個值,如果你從來沒有設置它的話?

繼承是一種將功能和數據從超類擴展到子類的好方法,但決不允許單獨的實例共享相同的數據。

由於在第二個實例中您從不設置exampleText,因此您的日誌打印輸出顯示爲空。

+0

謝謝。有想法。 – WenhaoWu 2014-08-28 13:56:01