0

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

4

2 回答 2

2

我有两个适合我的解决方案。我不知道解决方案是否很好:-)

解决方案 A:

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

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

    }

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

解决方案 B:

  1. 在您的自定义视图中添加一个 Activity 属性,您在创建 customView 期间将其设置为主 Activity:

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

......

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

                Intent mySearchIntent = new Intent( mainactivity, SearchActivity.class);
                mainactivity.startActivityForResult(mySearchIntent,1);
    
于 2013-11-19T10:12:41.290 回答
1

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

  1. 在扩展, orMyCustomView的一种风格的类中使用,并从那里调用。ActivityFragmentFragmentActivitystartActivityForResult()
  2. 将您的活动实例传递给MyCustomView(可能通过构造函数)并使用instanceOfYourActivity.startActivityForResult(). 但是,这可能是不安全的并且会导致副作用(例如,您可能无法捕捉到onActivityResult())。
于 2013-06-06T19:31:34.603 回答