从静态方法调用 startActivityForResult

2023-12-12

我有一个按钮监听器,当用户单击按钮时我想启动相机意图。 目前我有这个:

public class ButtonListener implements View.OnClickListener 
{
private ArrayList<String> connectedItems;
private String identifier = null;
private Context context;
private EnteredValues enteredValues;

public ButtonListener(Context c, String identifier, ArrayList<String> connectedItems) {
    this.connectedItems = connectedItems;
    this.identifier = identifier;
    this.context = c;
}

public void onClick(View v) {
    if (identifier.equals(ButtonItem.takePhoto)) {
        MainActivity.takePhoto();
    }

}

现在我想在 mainActivity 中调用一个方法,并在那里启动 startActivityForResult,但出现错误,无法从静态方法调用 startActivityForResult。

public class mainActivity extends Activity{
...
   public static void takePhoto(){
       startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE));
          break;

       //Here I get the error..
   }

}

解决此类问题的最佳实践是什么?将 mainActivity 对象传递给我的 buttonListener 还是还有其他选项?

非常感谢:)


不要使用应用程序上下文 - 因为它会破坏您的 ActivityStack。 我建议向此静态方法添加 Activity 参数:

public static void takePhoto(Activity activity, int requestCode){
   activity.startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), requestCode);
}

不仅仅是从侦听器传递 Activity。您必须将 Activity 实例传递给它,而不是简单的 Context,因为只有 Activity 可以startActivityForResult() calls.

所以clickListener代码将更改如下: 公共类 ButtonListener 实现 View.OnClickListener { 私有 ArrayList 连接项; 私有字符串标识符= null; 私人活动活动; 私有 EnteredValues 输入值;

public ButtonListener(Activity activity, String identifier, ArrayList<String> connectedItems) {
    this.connectedItems = connectedItems;
    this.identifier = identifier;
    this.activity = activity;
}

public void onClick(View v) {
    if (identifier.equals(ButtonItem.takePhoto)) {
        MainActivity.takePhoto(activity, 100);
    }
} 

制作此类静态帮助器是一个很好的做法,以避免从代码的不同部分创建意图和 startActivities。

祝你好运。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从静态方法调用 startActivityForResult 的相关文章

随机推荐

  • ClearCase SCM 适配器支持注释

    我想用版本历史注释一些代码 当使用 SVN 时 这在 Eclipse 中很容易 但 Rational ClearCase SCM Adapter 插件似乎不支持它 我快速 Google 搜索显示 ClearCase 在命令行上支持通过以下方
  • Node.js - 如何检查 http 请求中 URL 的状态

    我正在尝试运行一个简单的应用程序 使用 http 服务器模块检查 URL 的状态 基本上这是一个简单的 http 服务器 require http createServer function req res res writeHead 20
  • Perl 中的 chomp 未按预期工作

    我在 Perl 中发现了 chomp 的奇怪行为 我无法理解为什么 chomp 会这样工作 以下行无法按预期工作 if chomp str1 eq chomp str2 但是 以下工作正常 chomp str1 chomp str2 if
  • Quartz.NET 3.0 似乎在同一范围内启动所有作业

    在定义了两个依赖于作用域服务 ScopedDataAccess 的作业 该服务是我的数据库上下文的包装器 之后 我很难将 Quartz 3 0 7 与 ASP NET Core 2 2 一起使用 services AddScoped
  • Ionic 2 无法解析 InAppBrowser 的所有参数

    我不明白为什么在使用本机 InAppBrowser 插件时出现以下错误 无法解析 InAppBrowser 的所有参数 import Component from angular core import NavController NavP
  • 如何添加提交表单的 5 分钟 JavaScript 倒计时器

    我想添加 5 分钟倒计时器 将表单提交到我的 php 页面
  • 从c++ xll返回二维数组到excel,回来

    首先我知道这个问题已经在这里被问过 从 c xll 返回多维数组到 excel 我曾试图重提这个话题 但没有成功 OP 最近不那么活跃 从来没有 这就是为什么我再次问这个问题 提前抱歉 我编写了一个返回 行 一维数组的函数 declspec
  • 这个 Pascal 语法有什么问题?

    我不明白这是怎么回事 你能帮我个忙吗 这是有问题的代码 While not EOF Archi do begin index index 1 Read Archi Alumno index Promes index Alumno index
  • python 中的 urllib2 相当于 ruby

    我在 python 中有一些代码 可以在 python 中发送 http 请求 但我试图弄清楚如何在 ruby 中执行此操作 因为我的服务器是 Rails import urllib2 sys json url http new openb
  • 将本地文件推送到 github 存储库中的目录

    我的本地存储库中有一个文件 我想将其推送到我的 Github 存储库中的目录 我有以下文件 F Development Python Workspace StringCalculator py 我需要将此文件推送到我的存储库的以下路径 ht
  • 尽管存在显式实例化,但类模板的成员函数模板找不到定义。不链接

    Edit 这不是链接问题的重复 因为我使用的是显式实例化 并且只有特定类型的成员函数不链接 其他函数会链接 以下代码可以编译但无法链接 我不明白为什么 它显式实例化Vector类来限制可能的参数数量T因此隐藏了定义Vector
  • SQL Server 2008 Express 无法附加 mdf 文件

    这是消息 它出什么问题了 是安装问题吗 标题 Microsoft SQL Server Management Studio 无法显示请求的对话框 附加信息 参数名称 nColIndex 实际值为 1 微软 SqlServer GridCon
  • Powershell - 根据文件名创建文件夹,然后将该文件放入该文件夹中

    我有一个文件列表说 T123 Product 1 jpg T123 Product 2 jpg T123 Product 3 jpg T456 Product 1 jpg T456 Product 2 jpg T456 Product 3
  • 如何在循环中使用 mutate 和 ifelse?

    我所做的是创建虚拟变量来指示连续变量是超过某个阈值 1 还是低于该阈值 0 我通过几次重复的突变实现了这一点 我想用循环代替 load tidyverse library tidyverse create data data lt data
  • 覆盖 XML 序列化方法

    我在尝试自定义 DateTime 变量在我的对象中序列化的方式时遇到问题 我希望它输出为 2011 09 26T13 00 00Z 但是当我重写 GetObjectData 函数 我认为这是执行此操作的方法 时 根本不会为它们输出任何 XM
  • 带有动态选项组的下拉列表

    嗨 cakephp 专家 我正在寻求您对带有动态 optgroup 的动态下拉列表的帮助 假设我有两个表 countries id country name counties id county name country id 现在 我想显
  • Android-NavigationView从右到左

    我正在使用 Android Studio 1 5 的最新版本 我想使用抽屉布局制作一个菜单 用于定位其调用 GravityCompat 我正在尝试使用这个组件并修改它 将抽屉从右向左放置 这是我的代码 public class MainAc
  • iOS 8 中的 NSDateFormatter 日期格式问题

    我有一个 NSDateFormatter 用来将 NSDate 格式化为字符串 以下格式不起作用 ddMMyyyy hhmmss SSS 当我尝试格式化 NSDate 时 我得到以下输出 18092014 08 49 03 638 其中有一
  • Azure 搜索是否处理同义词

    Azure 搜索 可以根据同义词进行搜索吗 例如 如果我搜索 鞋类 系统应该获取以下结果 鞋类的同义词 如鞋子 凉鞋等 我进行了很多搜索 但未能找到有关它的适当文档 我能找到的最接近的是一个帖子说它还不支持 但这是一个旧帖子 https s
  • 从静态方法调用 startActivityForResult

    我有一个按钮监听器 当用户单击按钮时我想启动相机意图 目前我有这个 public class ButtonListener implements View OnClickListener private ArrayList