活动在我的清单中声明如下:
<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
属性的值。
答案 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也可以。