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

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

17
Android 4.2:ネストされたフラグメントによるバックスタックの動作
Android 4.2では、サポートライブラリがネストされたフラグメントのサポートを取得しました。こちらをご覧ください。私はそれをいじってみましたが、バックスタックとgetChildFragmentManager()に関する興味深い動作/バグを見つけました。getChildFragmentManager()およびaddToBackStack(String name)を使用する場合、戻るボタンを押すと、システムはバックスタックを前のフラグメントまで実行しません。一方、getFragmentManager()を使用する場合およびaddToBackStack(String name)、戻るボタンを押すと、システムは前のフラグメントに戻ります。 私にとって、この動作は予想外です。デバイスの[戻る]ボタンを押すと、フラグメントが子のフラグメントマネージャーでバックスタックに追加された場合でも、最後に追加されたフラグメントがポップされます。 この動作は正しいですか?この動作はバグですか?この問題の回避策はありますか? getChildFragmentManager()のサンプルコード: public class FragmentceptionActivity extends FragmentActivity { @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); final FrameLayout wrapper1 = new FrameLayout(this); wrapper1.setLayoutParams(new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)); wrapper1.setId(1); final FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); params.topMargin = 0; final TextView text = new TextView(this); text.setLayoutParams(params); text.setText("fragment …

3
setRetainInstance(true)をさらに理解する
を呼び出すと、正確にはどうなりますか?ドキュメントは事実上存在せず、これは非常に重要な機能のようです。具体的には、このシーケンス(私が作成したもの)のどの程度が正しいかを知りたいです。setRetainInstance(true)Fragment ユーザーがデバイスを回転させます。 断片から取り外されるActivityとFragment.onDetach()呼ばれます。 アクティビティは破棄されます。Activity.onDestroy()と呼ばれます。 Activity(可能な場合GCにより、)Ja​​vaオブジェクトが削除されます。 新しいActivityJavaオブジェクトが作成されます。そのコンストラクタ、およびonCreate()呼び出されます。 では、フラグメントを含むレイアウトを設定するActivity.onCreate()かsetContentView(...)、フラグメントFragmentTransaction を追加するために使用します。 私はこれについて本当にわかりませんが、Androidは古いフラグメントを見つけるのに十分スマートでありFragment.onAttach()、新しいフラグメントに再アタッチするように呼び出すと思いますActivity 次に(または前に?誰が知っているか?)Activity.onResume()が呼び出されます。 それで正しいですか?FragmentTransaction.add(new MyFragment(), ...)初めて明示的に使用したとしても、Androidは古いフラグメントを見つけるのに十分スマートですか?もしそうなら、別のフラグメントを追加しないようにするにはどうすればよいonCreate()ですか?このようなことをする必要がありますか?: if (getSupportFragmentManager().findFragmentByTag("foo") == null) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.add(new FooFragment(), "foo").commit(); }

10
フラグメントからツールバーを取得する方法?
私が持っているActionBarActivityとNavigationDrawerし、使用support_v7 Toolbarアクションバーなど。私のフラグメントの1つで、ツールバーにカスタムビューがあります。他のフラグメントToolbarではタイトルを表示する必要があります。 Toolbarフラグメントからカスタマイズするためのインスタンスはどのように取得しますか?でActionBarを取得できますがgetActivity().getActionBar()、setTitle()このインスタンスActionBar を呼び出しても何も起こりません。 UPD: 私の場合 ((ActionBarActivity) getActivity()).getSupportActionBar().setTitle(); (MrEngineer13が言ったように)onHiddenChanged()から呼び出すため、最初のフラグメント作成では機能しません。今、私はonCreateView()にさらに1つ追加し、それは正常に動作します。

7
OnCreateOptionsMenu()がフラグメントで呼び出されていません
2つのフラグメントを水平に配置して1つのアクティビティを取得するアプリがあります。 私の活動では、onCreateOptionsMenu()アクションバーオプションメニューを表示できるようにして、メニューを膨らませました。しかし、フラグメントの1つからアクションバーメニュー項目を更新しようとすると、onCreateoptionsmenu()が呼び出されません。そのため、アクションバーのオプションメニューを更新できません。 私の活動のコードは次のとおりです: myActivity.java package com.andr.androidtablelist; import java.io.IOException; import android.app.ActionBar; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.Toast; import com.andr.fragments.ListLeftFragment; import com.andr.utils.DBHelper; public class TabletActivity extends Activity { ActionBar actionBar = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); DBHelper dbhelper; dbhelper = new DBHelper(this); try …

16
フラグメントは置き換えられていませんが、前のものの上に置かれています
アクティビティ: FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); Fragment1 fragment = new Fragment1(); Fragment2 fragment2 = new Fragment2(); transaction.replace(R.id.Fragment1, fragment); transaction.addToBackStack(null); transaction.commit(); FragmentTransaction transaction2 = getSupportFragmentManager().beginTransaction(); transaction2.replace(R.id.Fragment1, fragment2); transaction2.addToBackStack(null); transaction2.commit(); ビューのコード: <fragment android:id="@+id/Fragment1" android:name="com.landa.fragment.Fragment1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_below="@+id/include1" /> 問題は、コンテンツが実際に置き換えられないことです。つまり、コンテンツが上に配置されます(そのため、コンテンツはオーバーラップします)。 クリックすると、最初のフラグメントは適切に(2番目のフラグメントなしで)表示されますが、最初は両方が表示されています(最後のフラグメントのみを表示したい)。 ここで何が欠けていますか?

16
バックスタックの最新のフラグメントを取得する
最新のフラグメントインスタンスをバックスタックに追加するにはどうすればよいですか(フラグメントタグとIDがわからない場合)。 FragmentManager fragManager = activity.getSupportFragmentManager(); FragmentTransaction fragTransacion = fragMgr.beginTransaction(); /****After add , replace fragments (some of the fragments are add to backstack , some are not)***/ //HERE, How can I get the latest added fragment from backstack ??

5
フラグメントトランザクションアニメーション:スライドインおよびスライドアウト
フラグメント間のアニメーショントランザクションのチュートリアルをいくつか確認しました。私はアニメーションにこの方法を使用しましたが、うまくいきます: fragmentTransaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); しかし、このアニメーションを反転させたいと思います。古いフラグメントは左にスライドし、新しいフラグメントは右にスライドしますが、 R.animファイル私のスコープには役に立たないようです。 どうすればできますか?

6
ビューではなくAndroidでフラグメントを使用する利点は何ですか?
のために開発するとき Androidに、ターゲット(または最小)SDKを4(API 1.6)に設定し、Android互換パッケージ(v4)を追加して、のサポートを追加できFragmentsます。昨日私はこれを行いFragments、カスタムクラスからのデータを視覚化するために正常に実装しました。 私の質問はこれです:Fragments単にカスタムオブジェクトからビューを取得してAPI 1.5をサポートするのではなく、を使用する利点は何ですか? たとえば、クラスFoo.javaがあるとします。 public class Foo extends Fragment { /** Title of the Foo object*/ private String title; /** A description of Foo */ private String message; /** Create a new Foo * @param title * @param message */ public Foo(String title, String message) { this.title = …

6
Fragment ActionBarCompat内からのgetSupportActionBar
私が使用して新しいプロジェクトを始めているAppCompat/ActionBarCompatにv7サポートライブラリを。getSupportActionBarフラグメント内からの使用方法を理解しようとしています。フラグメントをホストする私のアクティビティは拡張されますが、フラグメントActionBarActivityの同様のサポートクラスが表示されません。 私の断片の中から public class CrimeFragment extends Fragment { //... getActivity().getSupportActionBar().setSubtitle(R.string.subtitle); // getSupportActionBar is not defined in the v4 version of Fragment //... } それを使用するためのGoogleページ(http://android-developers.blogspot.in/2013/08/actionbarcompat-and-io-2013-app-source.html)は、v4フラグメントに変更はないはずであると述べています。すべてのgetActivity()呼び出しをにキャストする必要がありActionBarActivityますか?それは貧弱なデザインのようです。

5
フラグメントonCreateViewとonActivityCreatedが2回呼び出される
Android 4.0 ICSとフラグメントを使用してアプリを開発しています。 ICS 4.0.3(APIレベル15)APIのデモサンプルアプリからの次の変更例を検討してください。 public class FragmentTabs extends Activity { private static final String TAG = FragmentTabs.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final ActionBar bar = getActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); bar.addTab(bar.newTab() .setText("Simple") .setTabListener(new TabListener<SimpleFragment>( this, "mysimple", SimpleFragment.class))); if (savedInstanceState != null) { bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0)); Log.d(TAG, "FragmentTabs.onCreate tab: …

16
入れ子になったフラグメントが遷移アニメーション中に消える
ここではシナリオがあります:活動は、フラグメントが含まAターン用途では、getChildFragmentManager()フラグメントを追加するA1と、A2その中にonCreateそのように: getChildFragmentManager() .beginTransaction() .replace(R.id.fragmentOneHolder, new FragmentA1()) .replace(R.id.fragmentTwoHolder, new FragmentA2()) .commit() これまでのところ、非常に良い、すべてが期待どおりに実行されています。 次に、アクティビティで次のトランザクションを実行します。 getSupportFragmentManager() .beginTransaction() .setCustomAnimations(anim1, anim2, anim1, anim2) .replace(R.id.fragmentHolder, new FragmentB()) .addToBackStack(null) .commit() 移行中、enterフラグメントのアニメーションBは正しく実行されますが、フラグメントA1とA2は完全に消えます。[戻る]ボタンでトランザクションを元に戻すと、それらは適切に初期化され、popEnterアニメーション中に正常に表示されます。 私の簡単なテストでは、奇妙になりました-子フラグメントのアニメーションを設定すると(以下を参照)、exitフラグメントを追加するとアニメーションが断続的に実行されますB getChildFragmentManager() .beginTransaction() .setCustomAnimations(enter, exit) .replace(R.id.fragmentOneHolder, new FragmentA1()) .replace(R.id.fragmentTwoHolder, new FragmentA2()) .commit() 達成したい効果は単純です- フラグメント(anim2)のアニメーションexit(またはそれである必要がありますpopExitか?A)を実行して、ネストされた子を含むコンテナー全体をアニメーション化します。 それを達成する方法はありますか? 編集:ここでテストケースを見つけてください Edit2:静的アニメーションを試してみてくれた@StevenByleに感謝します。どうやらアニメーションごとに(トランザクション全体にグローバルではなく)アニメーションを設定できます。つまり、子は無期限の静的アニメーションセットを持つことができ、親は異なるアニメーションを持つことができ、1つのトランザクションですべてをコミットできます。 。以下の説明と更新されたテストケースプロジェクトを参照してください。

11
java.lang.IllegalStateException:指定された子にはすでに親があります
フラグメントを初めて使用するときにフラグメントを使用しています。2回目はこの例外が発生しました。エラーが発生した行が見つかりませんでしたか? 04-04 08:51:54.320: E/AndroidRuntime(29713): FATAL EXCEPTION: main 04-04 08:51:54.320: E/AndroidRuntime(29713): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addViewInner(ViewGroup.java:3013) 04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addView(ViewGroup.java:2902) 04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addView(ViewGroup.java:2859) 04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addView(ViewGroup.java:2839) 04-04 08:51:54.320: E/AndroidRuntime(29713): …

13
FragmentPagerAdapterを使用するときに既存のフラグメントを取得する方法
私は、問題私の破片が介して互いに通信すること持ってActivity使用しているが、FragmentPagerAdapterヘルパークラスとして、その実装のタブの管理と接続のすべての詳細ViewPagerに関連するとTabHost。私はFragmentPagerAdapter、AndroidサンプルプロジェクトSupport4Demosによって提供されるのと同じように実装しました。 主な質問はFragmentManager、IDもタグもない場合に特定のフラグメントを取得するにはどうすればよいですか?FragmentPagerAdapterフラグメントを作成し、IDとタグを自動生成しています。

11
フラグメントのライフサイクル-表示/非表示時に呼び出されるメソッドはどれですか?
以下のメソッドを使用して、フラグメントを表示/非表示にして(NavigationDrawerで)フラグメントを切り替えます。 protected void showFragment(int container, Fragment fragment, String tag, String lastTag, boolean addToBackStack ) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); if ( lastTag != null && !lastTag.equals("")) { Fragment lastFragment = fragmentManager.findFragmentByTag( lastTag ); if ( lastFragment != null ) { transaction.hide( lastFragment ); } } if …

6
フラグメントでsetArguments()およびgetArguments()メソッドを使用する方法
2つのフラグメントがあります:(1)Frag1(2)Frag2。 Frag1 bundl = new Bundle(); bundl.putStringArrayList("elist", eList); Frag2 dv = new Frag2(); dv.setArguments(bundl); FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.the_fragg,dv); ft.show(getFragmentManager().findFragmentById(R.id.the_fragg)); ft.addToBackStack(null); ft.commit(); Frag2でこのデータを取得するにはどうすればよいですか?

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