Android 如何从片段中获取活动的名称?

Android 如何从片段中获取活动的名称?,android,android-fragments,android-activity,Android,Android Fragments,Android Activity,因此,基本上我将在两个不同的活动中使用一个片段。除了一个片段方法,我想在其中更改一些内容。那么,我如何获取使用片段的活动的名称,以便根据当前活动的名称执行操作。创建您自己的接口,并在两个活动中实现它活动,并最终将此实例传递给您的片段 public interface ActivityListener { void onClick(); } 将代码写入onClick()方法,并从片段中调用此方法。在Java中尝试: public interface ActivityListener {

因此,基本上我将在两个不同的活动中使用一个片段。除了一个片段方法,我想在其中更改一些内容。那么,我如何获取使用片段的活动的名称,以便根据当前活动的名称执行操作。

创建您自己的接口,并在两个活动中实现它活动,并最终将此实例传递给您的片段

public interface ActivityListener
{
  void onClick();
}

将代码写入onClick()方法,并从片段中调用此方法。

Java
中尝试:

public interface ActivityListener
{
  void onClick();
}
getActivity().getClass().getSimpleName() 
  • 但在使用片段中的
    getActivity()
    方法时要小心。如果您的片段未附加到活动,则getActivity()将返回null
Kotlin
中尝试:

activity?.javaClass?.simpleName
  • 它是零安全的

首先检查片段是否仍然附加到活动,然后可以检查活动名称:

if(isAdded()) {
        getActivity().getClass().getSimpleName();
    }
使用
this.getClass().getSimpleName()
获取活动的名称

如果您在OnClickListener(或其他内部类)的上下文中,请手动指定该类:

MainActivity.class.getSimpleName()

有关更多详细信息,请查看链接

我认为更好的解决方案是创建一个枚举来区分您的案例,并通过片段的参数发送该枚举。通过这种方式,您的案例将非常清楚,并且您将知道片段流中存在差异的原因。

如果您在另一个类中,并且您试图获取“初始类”的名称,那么您可以使用上下文访问它,如下所示:getContext().getClass().getSimpleName()

public interface ActivityListener
{
  void onClick();
}
例如:

public String getMyActivityName() {
    String myActivityName;
    myActivityName = getContext().getClass().getSimpleName();
    return myActivityName;
}


@Override
protected void onAttachedToWindow() {
    super.onAttachedToWindow();

    Toast.makeText(this.getContext(), "myActiveParentClass: "+getMyActivityName(), Toast.LENGTH_SHORT).show();
}

我希望它能帮助一些人…

第一个Ans很棒,但它是用java编写的,所以我用koltin来翻译它

activity?.javaClass?.simpleName

使用getAcctivity().getClass()@Mohammed Gadiwala:u可以使用托管片段中的getActivity()mth获取托管活动实例。感谢@Jawadlewwadi我使用了getClass.getname,它出现了,感谢againIn Kotlin:
Activity::javaClass.name