我有一个从LinearLayout扩展的自定义组视图:
class MyCustomView extends LinearLayout {
public MyCustomView(Context context, AttributeSet attrs) {
super(context, attrs);
onCreateView(context);
}
public MyCustomView(Context context, int checkableId) {
super(context);
onCreateView(context);
}
private void onCreateView(Context context){
View.inflate(context, R.id.my_custom_view, null);
}
}
在该自定义组视图中,我有一个按钮,当用户单击该按钮时,我需要使用startActivityForResult调用一个活动,因为我需要从该活动返回。
但是LinearLayout没有实现startActivityForResult和onActivityResult。
所以我的问题是:如何从“MyCustomView”调用startActivityForResult?
答案 0 :(得分:2)
我有2个解决方案,对我有用。我不知道解决方案是否合适: - )
解决方案A:
MainActivity有一个启动第二个活动的方法:
public void openSearchActivity(){
Intent mySearchIntent = new Intent( this, SearchActivity.class);
startActivityForResult(mySearchIntent, 0);
}
在自定义视图的ontouch方法中,调用MainActivity方法(openSearchActivity):
解决方案B:
在自定义视图中添加在创建customView期间设置为主活动的活动属性:
Activity mainactivity;
public void setMainactivity(Activity mainactivity) {
this.mainactivity = mainactivity;
}
.....
myCustomView.setMainactivity(this);
在onTouch中启动活动:
Intent mySearchIntent = new Intent( mainactivity, SearchActivity.class);
mainactivity.startActivityForResult(mySearchIntent,1);
答案 1 :(得分:1)
据我所知,您有两种选择:
MyCustomView
,Activity
或Fragment
之一并从那里调用FragmentActivity
的类中使用startActivityForResult()
。MyCustomView
(可能通过构造函数)并使用instanceOfYourActivity.startActivityForResult()
。这可能是不安全的并且会引起副作用(例如,您可能无法捕捉onActivityResult()
)。