kat*_*tit 13 android android-layout
我创建了自定义复合视图,其中包含拍摄照片的功能.
我这样称呼它(从视图):
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
((Activity)mContext).startActivityForResult(intent, index);
Run Code Online (Sandbox Code Playgroud)
这部分很好用.我不知道怎么做是如何onActivityResult在我的自定义视图中实现的?
或者我应该在Activity中捕获这个并重新路由到我的视图中?看起来不是很好的解决方案..
riw*_*nyk 13
你实际上可以这样做:
@Override
public void onClick(View v) {
final FragmentManager fm = ((FragmentActivity) getContext()).getSupportFragmentManager();
Fragment auxiliary = new Fragment() {
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//DO WHATEVER YOU NEED
super.onActivityResult(requestCode, resultCode, data);
fm.beginTransaction().remove(this).commit();
}
};
fm.beginTransaction().add(auxiliary, "FRAGMENT_TAG").commit();
fm.executePendingTransactions();
auxiliary.startActivityForResult(new Intent(getContext(), ToStartActivity.class), 3333);
}
Run Code Online (Sandbox Code Playgroud)
诀窍是使用辅助临时片段.
小智 8
作为最初的问题,我遇到了同样的问题.我知道你们都发布了工作解决方案,但是,所有解决方案都缺少一件事:封装.我的意思是 - 如果在一个活动中我有10个视图应该(在某些事件上)启动另一个活动,那么它应该是NORMAL,以便能够从需要该活动的视图中启动该新活动.你们都试图说服最好处理所有新的活动 - 比起为什么我们在每个视图中添加不同的逻辑.我们可能想要重新使用代码,并创建一个可以独立工作到我们使用它的自定义视图(工作可能包括显示另一个活动来选择某些东西).
我知道这是不可能的(或者还没有),并且清楚地证明Android SDK还没有准备好处理真正的大型应用程序.
如果你想要一个例子:在任何具有例如客户列表(应该是视图)的真实商业应用中,视图应该能够自己启动addcustomer活动,编辑客户活动等,独立于你放置的位置客户列表视图(控件) - 因为在大型应用程序中,您需要重新使用组件(您可能需要在订单产品活动,时间表活动等中显示客户列表控件).
一种可能的解决方案可能是: - 启动新活动(使用视图上下文(通常应该是父活动). - 在新活动关闭事件上,直接调用调用视图中的方法(取决于具体情况和可能性) :要么处理通常会在activityresult上运行的代码的静态,要么尝试将调用视图的实例传递给新活动,并执行相同的操作.这样,您可以处理新活动,而不会让包含活动以了解它的任何信息.
没有办法onActivityResult从你的角度捕捉,只能从Activity。
假设该Context对象是是不安全的Activity。一般来说,您不应该依赖这个事实。即使在视图的情况下看起来合理,您仍然应该仅使用通过Context接口可用的方法。Activity这是因为当您调用Activity特定函数时,您无法预测 , 上的所有副作用。
| 归档时间: |
|
| 查看次数: |
10148 次 |
| 最近记录: |