从Custom ViewGroup调用startActivityForResult

时间:2013-06-06 19:15:30

标签: android

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

2 个答案:

答案 0 :(得分:2)

我有2个解决方案,对我有用。我不知道解决方案是否合适: - )

解决方案A:

  1. Customview是主要活动的内部类
  2. MainActivity有一个启动第二个活动的方法:

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

    }

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

  4. 解决方案B:

    1. 在自定义视图中添加在创建customView期间设置为主活动的活动属性:

      Activity mainactivity;
      
      public void setMainactivity(Activity mainactivity) {
          this.mainactivity = mainactivity;
      }
      
    2. .....

          myCustomView.setMainactivity(this);
      
      1. 在onTouch中启动活动:

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

答案 1 :(得分:1)

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

  1. 在扩展MyCustomViewActivityFragment之一并从那里调用FragmentActivity的类中使用startActivityForResult()
  2. 将您的活动实例传递给MyCustomView(可能通过构造函数)并使用instanceOfYourActivity.startActivityForResult()。这可能是不安全的并且会引起副作用(例如,您可能无法捕捉onActivityResult())。