Android - 如何以编程方式获取parentActivityName属性值?

时间:2016-06-28 23:23:16

标签: android android-actionbar android-manifest android-toolbar

活动在我的清单中声明如下:

    <activity
        android:name=".TicketingHomeActivity"
        android:label="@string/title_activity_ticketing_home"
        android:parentActivityName=".HomeActivity" />

如何以编程方式获取android:parentActivityName的值?

我需要这样做,因为我刚用工具栏替换了我的ActionBar,但getSupportActionBar().setDisplayShowHomeEnabled(true)现在在活动中显示向上箭头,即使清单中没有设置parentActivityName属性。因此,我想在我的BaseActivity中检测是否没有设置parentActivityName,所以我可以相应地隐藏向上箭头。

注意 - 此问题与this question不重复,因为我具体询问如何以编程方式检测android:parentActivityName属性的值。

2 个答案:

答案 0 :(得分:1)

您可以在BaseActivity上拨打getParentActivityIntent()

它会返回一个Intent。然后,您可以致电getComponent(),返回ComponentName,从中获取android:parentActivityName(类名)。

修改

代码示例:

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    if (toolbar != null) {

        toolbar.setTitle(getTitle());

        Intent parentActivityIntent = getParentActivityIntent();
        boolean doesParentActivityExist;
        if (parentActivityIntent == null) {
            doesParentActivityExist = false;
        }
        else {
            ComponentName componentName = parentActivityIntent.getComponent();
            doesParentActivityExist = (componentName.getClassName() != null);
        }
        //toolbar.setSubtitle("Has parent: " + doesParentActivityExist);

        setSupportActionBar(toolbar);
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null && doesParentActivityExist) {

            actionBar.setDisplayHomeAsUpEnabled(doesParentActivityExist);
            actionBar.setHomeButtonEnabled(doesParentActivityExist);

            actionBar.setDefaultDisplayHomeAsUpEnabled(doesParentActivityExist);
            actionBar.setDisplayShowHomeEnabled(doesParentActivityExist);

        }
    }

答案 1 :(得分:0)

如果您未在manifest中设置属性,则不要对该活动使用setDisplayShowHomeEnabled()方法。
否则,其中一种方法是您可以将putExtra中的父活动名称放入父活动(呼叫活动)并在子活动中接收该活动(被叫活动)

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
     intent.putExtra("PARENT_ACTIVITY_NAME", "ThisActivityName");
     startActivity(intent);

然后像孩子那样收到

String parentActivityName = intent.getStringExtra("PARENT_ACTIVITY_NAME");

为此目的This Answer也可以。