2012-06-13 21 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