『【翻訳】Android Fragmentへの反対声明』の解説 http://ninjinkun.hatenablog.com/entry/2014/10/16/234611
![Square Fragmentやめるってよ](https://cdn-ak-scissors.b.st-hatena.com/image/square/0e62792c0a5373760c3a8a8bfd494e63bad45b3a/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F718159603c250132b7d2027c1edc7060%2Fslide_0.jpg%3F3765788)
AppCompat v7 の version 21 では、Fragment 入れ替えに android.R.id.content を使ってはいけない FragmentTransaction.replace() で android.R.id.content に MainFragment を入れる処理です。 public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportFragmentManager() .beginTransaction() .replace(android.R.id.content, new MainFragmen
Original: Advocating Against Android Fragments by @Piwai Translated by @ninjinkun Reviewed by @hotchemi 最近私はDroidcon Parisでテックトーク(フランス語)を行い、SquareがAndroidのFragmentを利用して直面した問題と、Fragmentを避ける方法について説明した。 2011年に我々は以下の理由でFragmentを使う決断をした。 この時点で我々はタブレットをサポートしていなかった。しかしいつかは対応することがわかっていた。FragmentトはレスポンシブなUIを作るのを助けてくれる。 Fragmentはビューコントローラーだ。ビジネスロジックを単位ごとに分離してテスト可能にしてくれる。 FragmentのAPIはバックスタックのマネジメントを提供してくれる(
DialogFragmentにsetRetainInstance(true)を指定する時は注意が必要です。 下記の手順を踏むと、表示中のダイアログが閉じてしまいます。 【手順】 1. DialogFragmentを生成し、setRetainInstance(true)を指定 2. DialogFragmentを.show(...)メソッドで表示 3. 画面の向きを変更する(Orientation change) 【結果】 手順2で表示したダイアログが閉じてしまいます(画像1)。 しかし、setRetainInstance(false)を設定している場合ダイアログは閉じません(画像2)。 setRetainInstance(true)の場合でもダイアログを閉じたくなければ、次の回避策を使います。 # コードが汚れる上に力技です。 【回避策】 onDestroyView()でsuper.onD
IllegalStateException Fragmentを利用する上で、避けて通れないのがIllegalStateExceptionです。Androidのアプリを作る上でFragmentを利用してる場合は、みなさんほぼ遭遇したことがあるのではないでしょうか。 今回はあえて、IllegalStateExceptionを起こすようなコードを作成し、実行してみます 「何故そのような動作が起こったのか」、「どうしてそのタイミングでそのメソッドを呼んではいけないのか」をPlatform内部のソースコードを見ながら考察してみます Fragment#setArguments(Bundle bundle) yanzmさんのブログ等々でも随分前から指摘されていることですが、FragmentはOSによって自動的に初期化されたりコンストラクタが呼び出されたりするので、基本的にコンストラクタの引数によるFra
FragmentPagerAdapter を使って各画面に Fragment を使う場合、ある画面の Fragment インスタンスを保持しておいてそれに対して処理を行うということがあります。 public class MainActivity extends SherlockFragmentActivity implements LibraryListener, DrawerListener { private MainFragment mMainFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewPager viewPager = (V
support-v4のFragmentをユニットテストできるようにライブラリをつくりました。 android-junit3-extension-support-v4 上記ライブラリ中の com.uphyca.testing.junit3.support.v4.FragmentUnitTestCase.java がFragmentをユニットテストするためのTestCaseクラスです。 使い方はActivityUnitTestCaseに準じ、以下のようにします。 FragmentUnitTestCaseを任意のFragment型でパラメタライズする コンストラクタにパラメタライズしたFragmentのクラスオブジェクトを指定してTestCaseインスタンスを生成する startFragment()メソッドを呼んでFragmentを開始する com.uphyca.testing.support.
Android DialogFragment では Dialog のサイズ指定は onActivityCreated でやれ 前のエントリでダイアログのサイズを指定する方法を紹介しましたが、 (Y.A.M の 雑記帳: Android Dialog の大きさを自分で設定する -) これを DialogFragment で行う場合、ちょっと注意が必要です。 DialogFragment には表示するダイアログのインスタンスを自分で作成するための onCreateDialog() というメソッドが用意されています。 このメソッドを Override して、任意の Dialog クラスのインスタンスを返すことでオリジナルのテーマを適用したダイアログを表示することができます。 public class MyDialogFragment extends DialogFragment { @Overr
Fragment から Activity にコールバックしたいときに、例えばこんな感じで実装することができます。 public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MainFragment fragment = new MainFragment(); fragment.setOnOkBtnClickListener(new MainFragment.OnOkBtnClickListener() { @Override public void onOkClicked() { // TODO Auto-generated method stub } }); getF
What are the different ways to get a reference to the currently visible fragment page in a ViewPager? First Solution You can set a unique tag on each fragment page: getSupportFragmentManager().beginTransaction().add(myFragment, "Some Tag").commit(); ... and then retrieve the fragment page via: getSupportFragmentManager().findFragmentByTag("Some Tag"); Using this approach, you need to keep track of
Android Support Package の Fragment から startActivityForResult() を使うときの注意点 今回は Support Package で Fragment を使う場合の注意点です。 まず、FragmentActivity で startActivityForResult() を使う場合、requestCode は 16bit 以下にしなければなりません。 http://tools.oesf.biz/android-4.0.1_r1.0/xref/frameworks/support/v4/java/android/support/v4/app/FragmentActivity.java#654 654 /** 655 * Modifies the standard behavior to allow results to be deliv
■ Fragment のサブクラス ・DialogFragment ・ListFragment ・PreferenceFragment ・WebViewFragment ■ その他のヘルパークラス ・FragmentManager ・FragmentTransaction Activity のレイアウトにフラグメントのレイアウトを挿入する ■ Activity のレイアウトファイルに <fragment> タグで入れる <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android
前々回(Android Fragment で setArguments() してるサンプルが多いのはなぜ?)に Argument を使えば再生成時に値を引き継げることを書きました。 前回(Android レイアウトから生成した Fragment は FragmentTransaction の対象にしてはいけない)はレイアウトから生成した Fragment には setArguments() できないことを書きました。 では、レイアウトから生成した Fragment で再生成時に以前の状態を引き継ぐにはどうしたらいいのか、ということなんですが、Activity と同じように onSaveInstanceState(Bundle outState) 時に引数で渡される Bundle に入れておけば onCreate(Bundle), onCreateView(LayoutInflater, V
ViewPager を Fragment と一緒に使うときの注意として ViewPager には id がセットされていなければならない、というものがあります。 例えば、次の用に XML レイアウトを使わないで ViewPager を画面に追加した場合、アプリが強制終了します。 public class MainActivity2 extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ViewPager mViewPager = new ViewPager(this); setContentView(mViewPager); PagerAdapter mAdapter = new PagerAdapt
FragmentはAndroid SDK 3.0からサポートされた機能だが、パックポートとしてAndroid1.6以降のSDK(1.6〜2.3.4)で使用することができる。 以下、Android 2.3.4でFragmentを使う場合の手順メモ Android互換性パッケージをインストールする 既存のAndroid 2.3.4用のandroid.jarにFragmentのサポートは含まれていないため、使用するためには「互換性パッケージ」と呼ばれるサポートライブラリィが必要になる。 このパッケージの導入はAndroid SDK and AVD Managerから簡単に行える。 プロジェクトに互換性パッケージのjarファイルを組み込む ダウンロードした互換性パッケージは%android_sdk%/extras/android/compatibilityに保存される ので、その配下にある and
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く