【问题标题】:How to get an activity via a view owned by this activity?如何通过该活动拥有的视图获取活动?
【发布时间】:2012-06-05 17:39:36
【问题描述】:

我为导航栏编写了一个独立的自定义 OnClickListener 类(不是成员类)。请参阅下面的代码。

class MyClickHandler implements OnClickListener {

@Override
public void onClick(View view) {
    Intent intent;
    Context ctx = view.getContext();
    int id = view.getId();
    switch(id){

    case R.id.app_home_id:
        intent = new Intent(ctx, FormEngineMainApp.class);
        ctx.startActivity(intent);
        break;
    case R.id.app_tasklist_id:
        intent = new Intent(ctx, WorkList.class);
        ctx.startActivity(intent);
        break;
    //more cases...

    }

}

}

每个按钮都会导致不同的活动。我倾向于在调用startActivity(intent); 后完成当前活动,但我需要当前活动实例来调用finish()。我不知道如何获取当前的活动实例。唯一可能有帮助的是参数view,但我在Android Developers中查看了View的参考,但未能找到解决方案。有什么建议吗?

【问题讨论】:

  • 对某个活动调用完成是否意味着您不能使用后退按钮返回该活动?
  • if(this instanceof YourActivityName)

标签: android view android-activity activity-finish


【解决方案1】:

当您调用finish() 时,该活动从堆栈中的条目被删除,因此我相信您永远无法获得对该旧活动的引用!

在您的情况下,最好的部分是使用startActivityWithResult(..., ...) 调用,然后在获取旧活动的引用之前根据requestCode 调用完成。

【讨论】:

  • 自行解决。我发现可以通过简单地将转换添加到上下文来将上下文转换为活动。在这种情况下,在startActivity(intent); 之后添加((Activity) ctx).finish(); 确实可以解决问题。我总是反对使用过度限定的方法。就我而言,我不需要结果,所以我避免使用startActivityWithResult()。不管怎样,谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
相关资源
最近更新 更多