上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Android]AppCompatActivityを使用するとFragmentのBackStackが上手く動かない

「Android Support Library 22.1」から、ActionBarActivityが非推奨になってしまって、
代替方法としてAppCompatActivityを使用することが推奨されました。

■Developerリファレンス
https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html
-----
This class is deprecated.
Use AppCompatActivity instead.
-------

■「Android Support Library 22.1」更新内容
http://android-developers.blogspot.jp/2015/04/android-support-library-221.html


そこで、AppCompatActivity を使用してみたのですが、動作に問題が・・・
FragmentsをBackStackに追加していても何故かバックキー押下時にStackから取り出されない。。。

調べてみたら、同じ問題にあたっている人がいた。
http://stackoverflow.com/questions/29787250/fragment-back-stack-does-not-work-when-extending-appcompatactivity


バックキーのイベントをフックして、自前でBackStackからpopすることで問題回避ができるようだ。


@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}


これで期待通りのバックキー押下でstackから取り出されてFragmentを戻すことができた。


【Android】自身のアプリがフォアグラウンドで起動しているかチェック②

以前、

【Android】自身のアプリがフォアグラウンドで起動しているかチェック

でアプリがフォアグラウンドかバックグラウンドかを判定する方法を書いていたのですが、ActivityManager::getRunningTasks()がAPI level 21から非推奨になってしまったんですよね。


そこで、今回は代替案を検討。

使用するAPIは、

Application.ActivityLifecycleCallbacks

名前の通り、アプリケーションレベルでActivityのライフサイクルを管理することができるこのActivityLifecycleCallbacksをimplementsします。

簡単に言うと、動いているActivityのカウンタを用意して
  • onActivityResumedでActivityが起動したら、カウントアップ
     
  • onActivityPausedでActivityが停止したら、カウントダウン

カウンタが1以上ならフォアグラウンド。1未満ならバックグラウンド。

こんな感じでしょうか。

public class SampleClass implements Application.ActivityLifecycleCallbacks {
private int activeActivityCount = 0;

public SampleClass(Context context) {
if (context instanceof Application) {
((Application)context).registerActivityLifecycleCallbacks(this);
}
}

boolean isForeground() {
if (activeActivityCount < 1) {
return false;
}
return true;
}

@Override
public void onActivityResumed(Activity activity) {
activeActivityCount++;
if (activeActivityCount < 1) {
activeActivityCount = 1;
}
}

@Override
public void onActivityPaused(Activity activity) {
activeActivityCount--;
}
}


※動かしていない(ビルドすらしていない)の上記実装はエラーになるかもしれないです。。。




【Android】 Android Studioでブレークポイントの一覧を表示する

徐々に開発をEclipseからAndroid Studioに移していっているが、
ショートカットやデバッグ機能などEclipseでのやり方が染み付いていて
なかなか新しい環境に慣れない。。。

とりあえず今回はブレークポイント一覧を出す方法

方法①
メニューから [Run] - [View Breakpoints...] を選択

方法②
[Ctrl + Shift + F8] を押下


Breakpintsダイアログが表示され、ダイアログ内に設定したブレークポイントの一覧が表示されます。


ダイアログで表示されるのは少しうっとおしい気もするが、使いこなせば便利そうな機能もありそうなので早く慣れたい。

プロフィール

hiiro

Author:hiiro

最新記事
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Counter
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。