2013-07-05 87 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

相关问题