android up button is not working as expected - android

I'm followed https://developer.android.com/training/appbar/up-action.html to add an up button for the app bar.
my manifest is
<activity
android:name=".activity.MyDiaryAct"
android:label="#string/title_activity_my_diary"
android:theme="#style/Theme.AppCompat.Light.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".activity.PageListAct"
android:label="#string/title_page_list"
android:theme="#style/AppTheme.NoActionBar"
android:parentActivityName=".activity.MyDiaryAct">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="activity.MyDiaryAct" />
</activity>
<activity
android:name=".activity.PageAct"
android:label="#string/title_page_name"
android:screenOrientation="portrait"
android:theme="#style/AppTheme.NoActionBar"
android:parentActivityName=".activity.PageListAct" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="activity.PageListAct" />
</activity>
I started PageAct from MyDiaryAct and click up button. It returned to myDiaryAct but I'm expecting PageListAct.
My codes at PageAct
android.support.v7.app.ActionBar ab = getSupportActionBar();
ab.setTitle(page.getName());
ab.setDisplayHomeAsUpEnabled(true);
What am I missing? I wish not to add codes at onOptionsItemSelected(). Thanks!
PS: I'm using targetSdkVersion 23.
UPDATE: while the possible duplicate post provides useful information and direction to solve my problem but the complete understanding and solution found at here.
https://developer.android.com/training/implementing-navigation/ancestral.html
In short, the parent has to be in backs tack else I need to create it manually.

Related

Set Title To Hidden on Android App

In my android app, I want to hide the app name from the view, as shown in the image on the left, but if you expand away, the app name to be displayed, as shown in the picture in the right. However, my current way to show the left image is to set android:label="#string/roster", which is incorrect.
The alternative is to completely hide the app name from all views. However, I struggled to do that and create the left image. I saw posts about using
android:theme="#android:style/Theme.NoTitleBar"
to remove titles, and I can do that, but then I couldn't display Roster in the red area. I can show more code on how my styles are set, if that is helpful.
Goal:
App name = Attendance Tracker
On Screen Activity = MainActivity (Roster is title)
On view of Roster activity, app name is hidden, Roster is shown in toolbar
On expanded view, app name is displayed as Attendance Tracker
AndroidMainfest.xml
<application
android:allowBackup="true"
android:icon="#mipmap/ic_launcher"
android:label="#string/app_name"
android:supportsRtl="true"
android:theme="#style/AppTheme">
<activity android:name=".MainActivity"
android:label="#string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".list_items"
android:label="#string/title_activity_list_items"
android:theme="#style/AppTheme.NoActionBar">
</activity>
<activity android:name=".AddMember"
android:label="#string/roster_add">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".DisplayMember">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Edit: I am aware the right picture displays different content, but the title bar is what I am focused on. I did not want to change the code of another page.
Simply calling the following method will hide the title from the toolbar
Assuming you're using the support library:
getSupportActionBar().setDisplayShowTitleEnabled(false);
Assuming you're using the system-provided toolbar:
getActionBar().setDisplayShowTitleEnabled(false);
Try this!!!
<activity android:name=".MainActivity"
android:label="">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

Android App Manifest Setup

Hello I am fairly new to Android App Development and was looking at some example code here. I understand that the manifest xml here states that by pressing the app to launch the map but I wanted to implement a login as well. I was wondering if anyone here had any advice in terms of how popular apps format this? Do they have a login as their launcher or the application itself? Thank You!
<activity
android:name=".MapsActivity"
android:label="#string/title_activity_maps" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
It seems you look to change the launcher activity
<activity android:name=".LoginActivity" android:label="#string/title" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
You can put the login activity that way

Ad overlay requires the useClientJar flag in intent extras.

Ran into this issue trying to get Interstitial Ads to work on my first android app. Being a complete novice I really had on idea how to add the "useClientJar" flag to the Intent Extras.
This wasn't the issue, it's actually an error in the AndroidManifest.xml and I'm posting this question/answer because it's one of the few situations I've run into with only 5 relevant google results, the top one being a piece of IRC chat with one poor guy running into the same problem as me.
The issue is that I had foolishly made my main activity into the AdActivity in the AndroidManifest.xml like this:
<activity
android:name="com.google.android.gms.ads.AdActivity" <!-- notice this name, this means the interstitial ad is now the main activity! -->
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="#string/app_name"
android:theme="#style/FullscreenTheme" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
The fix of course was to correct this like so:
<!-- They are now two separate activities -->
<activity
android:name=".FullscreenActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="#string/app_name"
android:theme="#style/FullscreenTheme" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="#android:style/Theme.Translucent" />

Android Search Activity and android:launchMode="singleTop"

I have a single activity in my app that uses a SearchView to search (see manifest-- the search intent is intercepted).
However, when I press search, nothing happens. The activity never re-starts itself. So, I removed android:launchMode="singleTop" from my activity and then it started re-starting itself and "working." However, it is preferable to have singleTop for me so that the activity only has one instance. Why is this not working when I have singleTop?
<activity
android:name="com.brianco.andypedia.MainActivity"
android:label="#string/app_name"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable" android:resource="#xml/searchable" />
</activity>
<meta-data android:name="android.app.default_searchable"
android:value=".MainActivity" />
I don't know if this answers your question, but this page shows a simple searchview example with ActionBar Compat (it is the new google library compatible for the old Android versions)
You need to process your search intent on onNewIntent besides onCreate.

How to change activity hierarchy?

I build a project with many activities. Every time, when I was creating new activity, I set a hierarchy parent. But I decided to make an activity with animation, which should be first. I tried to change some information inside manifest file and set the new one activity as the starting activity, but I'm doing something wrong and all the project is crushing. Ofc, I will be keep going and trying to change the manifest file, but maybe I can do that in an easier way using Eclipse tools?
--EDIT--
I solved my problem, it was a quite small mistake. I was just setting wrong layout and forget to change one more thing. I'm not a specialist yet on this topic, but maybe for other readers I will put here some information how to change the hierarchy using manifest file. If I will make any mistakes here, feel free to edit.
Ok, so let's suppose we have our project with a few activities. Inside Manifest file we can find some information about activities, this informations are between markers: . So, it may looks like:
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<activity
android:name="com.example.mastermind.MainActivity"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.mastermind.StartGameActivity"
android:label="#string/title_activity_start_game"
android:parentActivityName="com.example.mastermind.MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.mastermind.MainActivity" />
</activity>
<activity
android:name="com.example.mastermind.NewActivity"
android:label="#string/title_new_activity" >
</activity>
Now we want to change the MainActivity, which is the first one and set as the first one the NewActivity. We only need to change the name of activity which contains markers:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
for the name of NewActivity and also set it's layout, like this:
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<activity
android:name="com.example.mastermind.NewActivity"
android:label="#string/title_new_activity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.mastermind.StartGameActivity"
android:label="#string/title_activity_start_game"
android:parentActivityName="com.example.mastermind.MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.mastermind.MainActivity" />
</activity>
<activity
android:name="com.example.mastermind.MainActivity"
android:label="#string/app_name" >
</activity>
That should be Ok.
In the manifest file locate category.LAUNCHER:
<activity
android:name="com.example.StartActivity"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /><!-- This -->
</intent-filter>
</activity>
<activity
android:name="com.example.MainActivity"
android:label="#string/app_name" >
</activity>
The category.LAUNCHER declares your launch Activity.

Categories

Resources