タグ付けされた質問 「android-fragments」

フラグメントは、Androidアプリの再利用可能な動作またはユーザーインターフェースの一部を表します。

12
Androidフラグメント-別のフラグメントがその上にプッシュされたときにフラグメントのビューの状態を保存する方法
Androidでは、フラグメント(たとえばFragA)がバックスタックに追加され、別のフラグメント(たとえばFragB)が一番上に来ます。さて、打ち返すFragAとトップに来てonCreateView()呼ばれます。今、私はFragAそのFragB上に押される前に特定の状態にありました。 私の質問は、どうすればFragA以前の状態に復元できますか?状態を保存する方法はありますか(Bundleのように)、その場合はどのメソッドをオーバーライドする必要がありますか?

11
アクティビティグループ内のフラグメントを別のフラグメントに置き換える
グループアクティビティ内にフラグメントがあり、別のフラグメントに置き換えたい: FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction(); SectionDescriptionFragment bdf = new SectionDescriptionFragment(); ft.replace(R.id.book_description_fragment, bdf); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.addToBackStack(null); ft.commit(); アクティビティグループを使用せずに別のプロジェクトとして実行すると、正常に機能します。コントロールがgetview()内に入ると、すべてがlog catで正常に機能しますが、ビューが表示されず、例外も発生しません。本の詳細フラグメントを作成しますセクション詳細フラグメントに置き換えられます。 書籍詳細フラグメントのXMLにはID book_description_fragmentがあり、セクション説明フラグメントのXMLにはID section_description_fragmentがあります。 上記のコードはアイテムのonClickメソッドにあります。ユーザーが水平スクロールビューでアイテムをタップすると、フラグメントが変化します。

18
java.lang.IllegalStateException:onSaveInstanceStateの後でこのアクションを実行できません
アプリのサポートライブラリを使用しています。私のFragmentActivityでは、インターネットからデータをダウンロードするためにAsyncTaskを使用しています。onPreExecute()メソッドでFragmentを追加し、onPostExecute()メソッドでもう一度削除します。その間に方向が変更されると、上記の例外が発生します。詳細をご覧ください: private class onFriendAddedAsyncTask extends AsyncTask<String, Void, String> { DummyFragment dummyFragment; FragmentManager fm; FragmentTransaction ft; @Override protected void onPreExecute() { Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPreExecute"); dummyFragment = DummyFragment.newInstance(); fm = getSupportFragmentManager(); ft = fm.beginTransaction(); ft.add(dummyFragment, "dummy_fragment"); ft.commit(); } @Override protected void onPostExecute(String result) { Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPostExecute"); ft = fm.beginTransaction(); ft.remove(dummyFragment); ft.commit(); } @Override …

7
変数をアクティビティからフラグメントに渡し、それを戻す方法は?
現在Androidアプリを作成していますが、アクティビティとフラグメントの間に日付を渡したいです。私のアクティビティには、フラグメントを開くボタンがあります:DatePickerFragment。 私の活動では、フラグメントで変更したい日付を示しています。そのため、日付ピッカーに日付を渡し、それをアクティビティに送り返したいのです。 私は多くの解決策を試しましたが、どれもうまくいきません。簡単な方法は引数を渡すことですが、これはフラグメントでは実行できません。

3
ViewPagerが画面外のビューを破棄しないようにする
3つのフラグメントを表示しているFragmentPagerAdapterに接続されたViewPagerがあります。ViewPagerは、現在の位置から複数回スワイプすると、ホストされたフラグメントのビューを破壊するように見えます。 これらのビューはすべて単純なリストであり、この最適化は完全に不要なので、無効にしたいと思います。リストにはレイアウトアニメーションが適用されており、それらのアニメーションは破棄して再作成した後で再生されているため、視覚的な問題が発生しています。また、スクロールバーのイントロアニメーションが毎回表示され(スクロールバーが一時的に表示され、スクロールが可能であることを示します)、気が散る可能性があり、ユーザーの現在のスクロール位置がプロセスで失われます。 また、最初のスワイプが発生するまで3番目のフラグメントは読み込まれません。これは、各フラグメントが独自のサービス呼び出しを処理し、アクティビティが読み込まれるときに3つすべてを同時にオフにしたいため問題です。3番目のサービス呼び出しを遅延させることは、理想的とは言えません。 ViewPagerを説得してこの動作を停止し、すべてのフラグメントをメモリに保持する方法はありますか?

7
ビューでページャーを使用できますか(フラグメントではありません)
私が使用していますViewPager間でスワイプするためにFragments、私は使用することができますViewPager間のスワイプにViews簡単なXMLレイアウト? これは、Adapterフラグメント間をスワイプするために使用されるViewPagerの私のページです。 import java.util.List; import com.app.name.fragments.TipsFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentTransaction; import android.view.ViewGroup; public class PageAdapter extends FragmentPagerAdapter { /** * */ List<Fragment> fragments; public PageAdapter(FragmentManager fm,List<Fragment> frags) { super(fm); fragments = frags; } @Override public Fragment getItem(int arg0) { // TODO Auto-generated method stub return TipsFragment.newInstance(0, …

7
これは、深くネストされたスタックを離れるときにフラグメントバックスタックをクリーンアップする正しい方法ですか?
Android互換性ライブラリを使用してフラグメントを実装し、レイアウトサンプルを拡張して、別のフラグメントを起動するボタンがフラグメントに含まれるようにしました。 左側の選択ペインには、5つの選択可能なアイテムがあります- A B C D E。 それぞれがFragmentTransaction:replace詳細ペインに(を介して)フラグメントをロードします-a b c d e ここでe、フラグメントを拡張e1して、詳細ペインにも別のフラグメントをロードするボタンを含めました。e次のように、フラグメントのonClickメソッドでこれを行いました。 FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); ft.replace(R.id.details_frag, newFrag); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.addToBackStack(null); ft.commit(); 次の選択を行った場合: E - e - e1 - D - E 次に、フラグメントeは詳細ペインにあります。これで結構です。ただし、backこの時点でボタンを押しても何も起こりません。e1まだスタックにあるので、2回クリックする必要があります。さらに、クリックした後、onCreateViewでnullポインター例外が発生しました。 この問題を「解決」するために、A B C D Eが選択されている場合は常に次のコードを追加しました。 FragmentManager fm = getActivity().getSupportFragmentManager(); for(int i = 0; i < fm.getBackStackEntryCount(); ++i) …

6
Gmail 3フラグメントアニメーションシナリオの完全な実用サンプル?
TL; DR:「Gmailの3フラグメントアニメーション」シナリオと呼んでいるものの完全な実用サンプルを探しています。具体的には、次のように2つのフラグメントから始めます。 いくつかのUIイベント(たとえば、フラグメントBの何かをタップする)では、次のことが必要です。 画面から左にスライドするフラグメントA フラグメントBは画面の左端までスライドし、縮小してフラグメントAが空いたスポットを取り込みます。 画面の右側からフラグメントCをスライドさせて挿入し、フラグメントBによって空いた場所を取り上げます。 そして、戻るボタンを押すと、その一連の操作を元に戻します。 今、私はたくさんの部分的な実装を見てきました。以下でそのうちの4つを確認します。不完全であることに加えて、彼ら全員に問題があります。 @Reto Meier は、同じ基本的な質問に対するこの人気のある回答を提供してsetCustomAnimations()おり、で使用することを示していますFragmentTransaction。2つのフラグメントのシナリオ(たとえば、最初はフラグメントAしか表示されておらず、アニメーション効果を使用して新しいフラグメントBに置き換えたい)の場合、私は完全に同意しています。しかしながら: 「イン」と「アウト」のアニメーションは1つしか指定できないため、3つのフラグメントのシナリオに必要なすべての異なるアニメーションをどのように処理するかわかりません。 <objectAnimator>彼のサンプルコードではピクセル単位でハードワイヤード位置を使用し、それは非現実的な与えられた様々な画面サイズであるように見えるだろう、まだsetCustomAnimations()Javaでこれらのものを定義する可能性を排除する、アニメーションのリソースを必要とします 私はのようなものとでは規模のネクタイのための方法を対象アニメーターへと途方に暮れていますandroid:layout_weightAにおけるLinearLayout割合ごとにスペースを割り当てます フラグメントCが最初にどのように処理されるかについて困惑しています(GONE?android:layout_weightof 0?0のスケールで事前にアニメーション化されている?他の何か?) @Roman Nurikは、自分で定義したものを含め、どのプロパティでもアニメーション化できることを指摘しています。これは、独自のカスタムレイアウトマネージャーサブクラスを発明する代わりに、ハードワイヤードポジションの問題を解決するのに役立ちます。これは一部には役立ちますが、Retoの残りのソリューションにはまだ困惑しています。 このpastebinエントリの作成者は、いくつかの食欲をそそる疑似コードを示しています。基本的に、3つのフラグメントはすべて最初にコンテナに常駐し、フラグメントCはhide()トランザクション操作によって最初から非表示になっています。次に、UIイベントが発生したときにshow()Cとhide()Aを実行します。ただし、Bがサイズを変更するという事実をどのように処理するかはわかりません。また、同じコンテナに複数のフラグメントを追加できるように見えるという事実にも依存しています。それが長期にわたって信頼できる動作であるかどうかはわかりません(もちろん、問題なく動作するはずですがfindFragmentById()、中断する必要があります)。 このブログ投稿の著者は、Gmailがまったく使用setCustomAnimations()しておらず、代わりにオブジェクトアニメーターを直接使用していることを示しています(「ルートビューの左マージンを変更+右ビューの幅を変更するだけ」)。ただし、これは依然として2フラグメントソリューションAFAICTであり、ここで示した実装では、ピクセル単位で寸法を固定しています。 私はこれでプラグインを続けるつもりですので、いつか自分で答えてしまうかもしれませんが、誰かがこのアニメーションシナリオの3フラグメントソリューションを解決し、コード(またはそのリンク)を投稿できることを本当に期待しています。Androidのアニメーションでは、髪の毛を抜いたくなります。私を見た人は、これはほとんど実を結ばない試みであることを知っています。

5
フラグメントまたはサポートフラグメント?
Android 4.0以上をサポートするアプリを開発しています。android.appパッケージのフラグメントを使用します。私は4.0の古いフラグメントの実装に問題が直面していますと、同様にこのいずれか、すでにサポートライブラリに固定されて、私はより信頼性と一貫性のある実装を取得するためのサポートライブラリからバックフラグメント実装への切り替え検討しています。 これについてどう思いますか?Android 4向けに開発する際に、サポートライブラリのフラグメントがすでに利用可能であっても、それらを使用していますか?

11
親アクティビティからFragmentメソッドを呼び出す
Android Fragments Dev Guideで、「findFragmentById()またはを使用してFragmentManagerからFragmentへの参照を取得することにより、アクティビティがフラグメント内のメソッドを呼び出すことができる」とわかりましたfindFragmentByTag()。 次の例は、フラグメント参照を取得する方法を示していますが、フラグメント内の特定のメソッドを呼び出す方法は示していません。 誰でもこれを行う方法の例を挙げられますか?親アクティビティからフラグメント内の特定のメソッドを呼び出したいのですが。ありがとう。

7
FragmentPagerAdapter getItemは呼び出されません
FragmentPagerAdapterでフラグメントを再利用できません。.destroyItem()メソッドを使用して、フラグメントを削除していますが、再びgetItem()を呼び出していません。 public class ExamplePagerAdapter extends FragmentPagerAdapter { ArrayList < String > urls; int size = 0; public ExamplePagerAdapter(FragmentManager fm, ArrayList < String > res) { super(fm); urls = res; size = urls.size(); } @Override public int getCount() { if (urls == null) { return 0; } else { return size; …

9
Android Fragmentバックスタックの問題
私は、androidフラグメントのバックスタックが機能しているように見える方法に大きな問題を抱えており、提供されたヘルプに最も感謝しています。 あなたが3つのフラグメントを持っていると想像してください [1] [2] [3] ユーザーがナビゲートできるようにし[1] > [2] > [3]ながら、戻る途中([戻る]ボタンを押す)にしたい[3] > [1]。 私が想像したように、これは、XMLで定義されたフラグメントホルダーにaddToBackStack(..)フラグメントをもたらすトランザクションを作成するときに呼び出しを行わないことによって達成[2]されます。 この現実は[2]、ユーザーが戻るボタンを押したときに再び表示され[3]ないようaddToBackStackにするには、フラグメントを表示するトランザクションで呼び出してはならないように見えます[3]。これは完全に直観に反しているようです(おそらくiOSの世界から来ているでしょう)。 とにかく、この方法でそれを行うと、[1] > [2]私が戻って押したときに[1]、期待どおりに戻ります。 私が行っ[1] > [2] > [3]てから戻ると、[1](予想どおり)に戻ります。[2]からジャンプしようとすると、奇妙な動作が発生し[1]ます。まず、[3]表示される前に簡単に表示さ[2]れます。この時点で「戻る」を押す[3]と表示され、もう一度「戻る」を押すとアプリが終了します。 誰かが私がここで起こっていることを理解するのを手伝ってくれる? そして、これが私の主な活動のレイアウトxmlファイルです。 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <fragment android:id="@+id/headerFragment" android:layout_width="match_parent" android:layout_height="wrap_content" class="com.fragment_test.FragmentControls" > <!-- Preview: layout=@layout/details --> </fragment> <FrameLayout android:id="@+id/detailFragment" android:layout_width="match_parent" android:layout_height="fill_parent" /> 更新 …

5
フラグメントのrunOnUiThread
アクティビティをフラグメントに変換しようとしています。のエラーマークrunOnUiThread。過去に: GoogleActivityV2はActivityから拡張されます。クラスExecuteTaskのrunOnUiThread。アクティビティにネストされたクラスExecuteTask。 (実行ok)今: GoogleActivityV2はFragmentから拡張されます。クラスExecuteTaskのrunOnUiThread。アクティビティにネストされたクラスExecuteTask。(runOnUiThreadのエラー) これが私のコードです public class GoogleActivityV2 extends SherlockMapFragment implements OnMapClickListener , OnMapLongClickListener , OnCameraChangeListener , TextWatcher { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View rootView = inflater.inflate(R.layout.activity_googlev2, container, false); Init(); adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_dropdown_item_1line); textView = (AutoCompleteTextView) getView().findViewById(R.id.autoCompleteTextView1); return rootView; } public void onCameraChange(CameraPosition …

12
Androidで別のフラグメントに移動した後にナビゲーションスタックをクリアする方法
Androidで新しいナビゲーションアーキテクチャコンポーネントを使用していますが、新しいフラグメントに移動した後、ナビゲーションスタックをクリアできません。 例:loginFragmentにいて、ホームフラグメントに移動したときにこのフラグメントをスタックからクリアして、ユーザーが[戻る]ボタンを押したときにloginFragmentに戻らないようにします。 シンプルなNavHostFragment.findNavController(Fragment).navigate(R.id.homeFragment)を使用してナビゲートしています。 現在のコード: mAuth.signInWithCredential(credential) .addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { NavHostFragment.findNavController(LoginFragment.this).navigate(R.id.homeFragment); } else { Log.w(TAG, "signInWithCredential:failure", task.getException()); } } }); navigate()でNavOptionsを使用してみましたが、戻るボタンがまだloginFragmentに戻ってきます NavOptions.Builder navBuilder = new NavOptions.Builder(); NavOptions navOptions = navBuilder.setPopUpTo(R.id.homeFragment, false).build(); NavHostFragment.findNavController(LoginFragment.this).navigate(R.id.homeFragment, null, navOptions);

7
向きの変更に対するAndroidフラグメントのライフサイクル
互換性パッケージを使用して、フラグメントを使用して2.2をターゲットにします。 アプリでフラグメントを使用するようにアクティビティを再コーディングした後、方向の変更/状態管理を機能させることができなかったため、単一のFragmentActivityと単一のFragmentを持つ小さなテストアプリを作成しました。 方向の変更からのログは奇妙で、フラグメントOnCreateViewへの複数の呼び出しがあります。 新しいインスタンスを作成するのではなく、フラグメントをデタッチして再アタッチするような何かが明らかに欠けていますが、どこが間違っているのかを示すドキュメントが表示されません。 誰かが私がここで間違っていることについていくつかの光を当てることができますか?ありがとう 向きを変えた後のログは以下の通りです。 Initial creation 12-04 11:57:15.808: D/FragmentTest.FragmentTestActivity(3143): onCreate 12-04 11:57:15.945: D/FragmentTest.FragmentOne(3143): OnCreateView 12-04 11:57:16.081: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState null Orientation Change 1 12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): onSaveInstanceState 12-04 11:57:39.031: D/FragmentTest.FragmentTestActivity(3143): onCreate 12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): OnCreateView 12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState not null 12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): OnCreateView 12-04 11:57:39.167: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.