2012-06-13 49 views
0

我想完成我的自定義組件中的活動。 問題是如何從我的自定義組件獲取活動的引用? 我可以得到的是自定義組件中的Context。 我試圖將Context轉換爲Activity(代碼在下面),它似乎沒問題。 但我不確定這一點。也許有更好的辦法。 所以,請告訴我這段代碼是否足夠好或有任何問題或風險。如何從自定義組件完成活動?

public class MyCustomComponent extends RelativeLayout { 
private Activity activity; 
public MyCustomComponent(Context context, AttributeSet attrs) { 
    super(context);  
    Button btn = new Button(context); 
    btn.setText("finish"); 
    addView(btn); 

    activity = (Activity)context; // here I want to get the Acitivity reference 
    btn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      MyCustomComponent.this.activity.finish(); 
     } 
    }); 
} 

}

回答

0

如何傳遞活動的組成部分?

public MyCustomComponent(Context context, Activity activity, AttributeSet attars) 

編輯 您可以添加setActivity方法類

public class MyCustomComponent extends RelativeLayout { 
private Activity activity; 

public void setActivity(Activity myActivity){ 
    activity = myActivity; 
} 

public MyCustomComponent(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    Button btn = new Button(context); 
    btn.setText("finish"); 
    addView(btn); 
    btn.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      activity.finish(); 
     } 
    }); 
} 

}

,並在您的主要活動中,添加

finishAction = (MyCustomComponent) findViewById(R.id.component); 
    finishAction.setActivity(this); 
+0

對不起,我不很懂這個。但恐怕自定義組件不能像這樣的構造函數正常工作。 – hardPass

+0

嗨,其實我只是從你的代碼直接複製,並沒有問題來完成我的活動。 – Kendroid

+0

我編輯了我的答案,希望這可以幫助:) – Kendroid