【问题标题】:getSimpleName from a BaseActivity after finish()在完成()之后从 BaseActivity 中获取简单名称
【发布时间】:2014-10-09 14:34:12
【问题描述】:

在我的应用程序中,我创建了一个 BaseActivity,我从中扩展了我的所有活动。

在 BaseActivity 中,我通过以下语句识别正在运行的活动:this.getClass().getSimpleName() (ex: ActivityA)

直到我打开新活动(ActivityBActivityC 等...),一切正常。

当我使用手机的返回按钮时出现问题(我从activityC 回到ActivityB)。在这种情况下,ActivityB 可以从堆栈中正确恢复,但在BaseTableActivityB)中,this.getClass().getSimpleName() 的值仍然是ActivityC

如何避免这个问题?你知道你帮我吗?

【问题讨论】:

  • 您能否提供一些代码,以说明如何以及在何处调用 this.getClass().getSimpleName()?
  • 在我的 BaseActivity 的 onResume 方法中... public class BaseActivity extends Activity implements ConnectorDelegate { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyApplication.getConnectionManager().setDelegate(this); } @Override 受保护的无效 onResume() { super.onResume(); MyApplication.getConnectionManager().startListening(this); currentActivityName=this.getClass().getSimpleName(); } ......

标签: android


【解决方案1】:

您需要做的就是在您的 BaseActivity 中创建一个protected final String,如下所示...

public class MyBaseActivity extends Activity {

    protected final String TAG = getClass().getSimpleName();

    // Any other code here

}

任何扩展MyBaseActivityActivity 都将继承TAG 字段,并将在创建时使用正确的名称进行实例化。

我在我的所有 Android 基类中都放置了一个 TAG 字段,因此我可以将它与 Log 一起使用,以便在它们登录到 logcat 时识别不同的对象。

【讨论】:

  • 不幸的是它不起作用。问题和以前一样。当我返回时,TAG 的值仍然是旧的。
  • @user2381742 :我可以向你保证它确实有效,尽管我使用了getClass().getName(),它给出了一个完全限定的名称而不是简单的类名。你提到BaseTable - 那是什么?
  • 对不起,我写错了。我想写 BaseActivity
  • @user2381742 你如何确定它不起作用?您使用调试器还是打印该字符串?您是否在正确的时间检查值?也许你检查一下ActivityC的onPause()?
猜你喜欢
  • 2012-03-14
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 2017-02-04
相关资源
最近更新 更多