2013-07-05 36 views
0

我在我的項目中有2個班級,第一次擴展活動和其他擴展其他班級。請幫助如何從其他班級不活動中調用主要活動中的方法?在這裏我的代碼:如何從其他類的活動中調用方法而不是在Android中的活動?

  1. 擴展活動課

    public class Isign extends Activity { 
    private static final String TAG   = "Sample::Activity"; 
    
    public Isign() { 
        Log.i(TAG, "Instantiated new " + this.getClass()); 
    } 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        Log.i(TAG, "onCreate"); 
        requestWindowFeature(Window.FEATURE_NO_TITLE); 
        super.onCreate(savedInstanceState); 
        a = new IsignView(this); 
    
    LinearLayout lv = new LinearLayout(this); 
    lv.setOrientation(LinearLayout.VERTICAL); 
    LinearLayout.LayoutParams textViewParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    
    tv = new TextView(this); 
    tv.setTextSize(20); 
    tv.setText("RESULT : "); 
    tv.setLayoutParams(textViewParams); 
    lv.addView(tv); 
    lv.addView(a); 
    
    setContentView(lv);} 
    
    public void update_kom(String d){ 
        Log.i("asd", "asd"); 
        tv.setText(""); 
        tv.setText("RESULT : " + d); 
    } 
    
  2. 沒有擴大活動課

    public class IsignView extends IsignCvViewBase { 
    public IsignView(Context context) { 
    super(context); 
    
    try { 
    
    } catch (IOException e) { 
        e.printStackTrace(); 
        Log.e(TAG, "Failed to load cascade. Exception thrown: " + e); 
    } 
    } 
    

順便說我已經使用這個方法來調用方法從主要活動:

new Isign().update_kom("bottle"); 

和我得到這個錯誤的logcat:

07-05 06:52:22.290: E/AndroidRuntime(2708): FATAL EXCEPTION: Thread-12 
07-05 06:52:22.290: E/AndroidRuntime(2708): java.lang.NullPointerException 
07-05 06:52:22.290: E/AndroidRuntime(2708): at 
org.baharsan.isign.Isign.update_kom(Isign.java:86)  
07-05 06:52:22.290: E/AndroidRuntime(2708): at 
org.baharsan.isign.view.IsignView.processFrame(IsignView.java:353) 
07-05 06:52:22.290: E/AndroidRuntime(2708): at 
org.baharsan.isign.cv.IsignCvViewBase.run(IsignCvViewBase.java:101) 
07-05 06:52:22.290: E/AndroidRuntime(2708): at 
org.baharsan.isign.view.IsignView.run(IsignView.java:557) 
07-05 06:52:22.290: E/AndroidRuntime(2708): at 
java.lang.Thread.run(Thread.java:1019) 

謝謝你的迴應,我很抱歉,如果重複這個問題,雖然我不能找到像我的問題similiar問題。其他問題只是告訴我如何從主要活動中調用其他類中的方法但這個問題相反。 「如何從其他課程的主要活動中調用方法?」

太感謝你了:)

回答

2

儘管RSenApps的答案有效,但僅在特定活動內部使View工作纔是最好的辦法。相反,在你的視圖中聲明一個接口。然後讓Activity實現該接口,並通過構造函數或setter將其提供給View。當你感興趣的任何事件發生時,View可以調用接口實例上的方法。

另外,請注意,您永遠無法在自己的Activity上調用new,活動總是由框架管理。

+0

謝謝你的解釋。這對我很有幫助。 :) – baharsan

1

最簡單的方法是通過你的其他類,而不是環境中的活性的參考。例如

public IsignView(Isign activityReference) { 
super((Context) activityReference); 
activityReference.update_kom("bottle"); 
try { 

} catch (IOException e) { 
    e.printStackTrace(); 
    Log.e(TAG, "Failed to load cascade. Exception thrown: " + e); 
} 
} 
0

呼叫 「WantedActivity」 由 「CallActivity」 writeing這

public class CallActivity extends Activity { 
    //The Activity we wnt to call 
    private WantedActivity stringname; 

字符串名稱是用來對付WantedActivity。您也可以刪除private

相關問題