2011-07-08 64 views
2

其實我想從另一個活動調用一個活動的功能..我爲它寫了一個簡單的代碼,但它不工作..並顯示運行時錯誤。請檢查代碼...如果有什麼差錯。對於活性1如何從另一個活動調用一個活動的功能

代碼:爲活性2

public class Activity1 extends Activity2 
{ 
     public void onCreate(Bundle savedInstanceState) 
     { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.main2); 

       call(); 
     } 
     public void call() 
     { 
       showToast("Helloo"); 
     } 
} 

代碼:

public class Activity2 extends Activity 
{ 

     public void onCreate(Bundle savedInstanceState) 
     { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.main); 
     } 
     public void showToast(String s) 
     { 
       EditText t=(EditText)findViewById(R.id.editText1); 
       t.setText(s); 
     } 
} 
+0

請張貼異常的logcat的 – Egor

+0

公共無效showToast(String s)將 { EditText t =(EditText)findViewById(R.id.editText1); t.setText(s); }編輯上述方法的代碼。改變其簽名。傳遞活動引用它。然後在該活動上調用findviewById,而不是在聲明哪種方法的當前活動。 –

回答

3

你的問題是你打電話給findViewById不存在的視圖。

Activity1正在延伸Activity2

您撥打Activity1super.onCreate它調用onCreateActivity2這就要求setContentView()R.layout.main

我猜你的文字R.id.editText1是在主佈局。

當從呼叫super.onCreateActivity1返回時,就立即復位內容佈局main2

您嘗試編輯的編輯文本框不再存在。 findViewById找不到它,因爲佈局不活躍。因此它崩潰。

要修復它試試這個:

public class Activity1 extends Activity2 
{ 
     private EditText et; 
     public void onCreate(Bundle savedInstanceState) 
     { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.main2); 

       et = (EditText) findViewById(R.id.editText2); 
       call(); 
     } 
     public void call() 
     { 
       showToast("Helloo", et); 
     } 
} 

R.id.editText2是在佈局main2編輯文本框。

在活性2:

public class Activity2 extends Activity 
{ 

     public void onCreate(Bundle savedInstanceState) 
     { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.main); 
     } 
     public void showToast(String s, EditText t) 
     { 
       t.setText(s); 
     } 
} 
+0

那麼我該如何解決這個問題 – AndroidDev

+0

我剛剛更新。嘗試編輯。 – DeeV

+0

或者,您在Activity1中使用R.layout.main而不是R.layout.main2。你不需要做任何其他的改變。它應該可以工作,但是你在代碼中引入了很多混亂。 – DeeV

2

首先,這是一個不好的設計原則,因爲只有一個活動是ACTIV一次。你可以使一個方法是靜態的,然後你可以交叉調用它們,但是在那時它應該在某種常見的util類中。

1

最簡單的方法是將您的showToast()方法聲明爲public static,這樣您就可以調用它,而無需使用Activity2的實例。

1

如果你把它作爲靜態應聲明它在你的主要活動

相關問題