Android 从自定义视图组调用startActivityForResult

Android 从自定义视图组调用startActivityForResult,android,Android,我有一个从LinearLayout扩展的自定义组视图: class MyCustomView extends LinearLayout { public MyCustomView(Context context, AttributeSet attrs) { super(context, attrs); onCreateView(context); } public MyCustomView(Context context, int che

我有一个从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?

据我所知,您有两种选择:

  • 在扩展
    Activity
    Fragment
    FragmentActivity
    之一的类中使用
    MyCustomView
    ,并从中调用
    startActivityForResult()
  • 将活动实例传递到
    MyCustomView
    (可能通过构造函数)并使用
    instanceOfYourActivity.startActivityForResult()
    。Hoveware说,这可能是不安全的,并会导致副作用(例如,您可能无法捕捉到ActivityResult())

  • 据我所知,你有两个选择:

  • 在扩展
    Activity
    Fragment
    FragmentActivity
    之一的类中使用
    MyCustomView
    ,并从中调用
    startActivityForResult()
  • 将活动实例传递到
    MyCustomView
    (可能通过构造函数)并使用
    instanceOfYourActivity.startActivityForResult()
    。Hoveware说,这可能是不安全的,并会导致副作用(例如,您可能无法捕捉到ActivityResult())

  • 我有两种解决方案,对我有效。我不知道这些解决方案是否好:-)

    解决方案A:

  • Customview是主活动的内部类
  • MainActivity具有启动第二个活动的方法:

    public void openSearchActivity(){
    
    Intent mySearchIntent = new Intent( this, SearchActivity.class);
    startActivityForResult(mySearchIntent, 0);
    
    }

  • 在自定义视图的ontouch方法中,调用MainActivity方法(openSearchActivity):

  • 解决方案B:

  • 在自定义视图中,添加一个活动属性,在创建自定义视图期间将其设置为主活动:

    Activity mainactivity;
    
    public void setMainactivity(Activity mainactivity) {
        this.mainactivity = mainactivity;
    }
    
  • 在onTouch中启动活动:

                Intent mySearchIntent = new Intent( mainactivity, SearchActivity.class);
                mainactivity.startActivityForResult(mySearchIntent,1);
    

  • 我有两种解决方案,对我有效。我不知道这些解决方案是否好:-)

    解决方案A:

  • Customview是主活动的内部类
  • MainActivity具有启动第二个活动的方法:

    public void openSearchActivity(){
    
    Intent mySearchIntent = new Intent( this, SearchActivity.class);
    startActivityForResult(mySearchIntent, 0);
    
    }

  • 在自定义视图的ontouch方法中,调用MainActivity方法(openSearchActivity):

  • 解决方案B:

  • 在自定义视图中,添加一个活动属性,在创建自定义视图期间将其设置为主活动:

    Activity mainactivity;
    
    public void setMainactivity(Activity mainactivity) {
        this.mainactivity = mainactivity;
    }
    
  • 在onTouch中启动活动:

                Intent mySearchIntent = new Intent( mainactivity, SearchActivity.class);
                mainactivity.startActivityForResult(mySearchIntent,1);
    

  • 您需要从使用
    MyCustomView
    的活动中调用
    startActivityForResult
    。您需要从使用
    MyCustomView
    的活动中调用
    startActivityForResult
    。我尝试使用片段,但是嵌套片段还不受支持,我不想以编程方式实例化片段,所以我将使用您的第二个选项,唯一的问题是ActivityResult方法必须在Activity中实现。我尝试使用片段,但是嵌套片段还不受支持,我不想以编程方式实例化片段,所以我将使用第二个选项,唯一的问题是activityresult方法必须在Activity中实现。