新しいView
クラスを作成しました。そのクラス内ではFragmentManager
にアクセスする必要がありますが、どのように把握できません。FragmentManager from Context
文脈からFragmentManager
にアクセスできますか?
CustomView extends LinearLayout
新しいView
クラスを作成しました。そのクラス内ではFragmentManager
にアクセスする必要がありますが、どのように把握できません。FragmentManager from Context
文脈からFragmentManager
にアクセスできますか?
CustomView extends LinearLayout
与えられたContextがActivity(Post-Honeycomb)またはFragmentActivity(Pre-honeycomb)を拡張する場合のみ。
この場合、リフレクションまたはtry-catchを使用していることを100%確かめる必要があります。
try{
final Activity activity = (Activity) context;
// Return the fragment manager
return activity.getFragmentManager();
// If using the Support lib.
// return activity.getSupportFragmentManager();
} catch (ClassCastException e) {
Log.d(TAG, "Can't get the fragment manager with this");
}
思想私はそうView
は本当にただのものを示すためのものであり、実際のアプリの状態を変更する、それが私の意見だべきではありませんリファクタリングをお勧めします。
あなたがサポートフラグメントを使用している場合、あなたはおそらく、実際にしたい:
try {
FragmentManager fragmentManager = ((FragmentActivity) context).getSupportFragmentManager();
} catch (ClassCastException e) {
Log.e(TAG, "Can't get fragment manager");
}
は、これが私の仕事です:
Context mContext;
...
//Get FragmentManager
FragmentManager fragmentManager = ((Activity) mContext).getFragmentManager();
を(もちろん、あなたが最初にすべてのmContextを初期化する必要が)
どのようにこのキャスティングのロジックは、可能になりました – blackHawk
アプリケーション内のFragmentManager(またはSupportFragmentManager)にアクセスできますが、他の回答から分かるように、これはアクティビティインスタンスを介してのみ行うことができます。
しかし、あなたが直接ActivityLifecycleCallbacksインターフェイスを使用して、任意の活動を呼び出すために必要とせずに活動を経てFragmentManagerへのアクセスを得ることができます、
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks {
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
activity.getFragmentManager()
if(activity instanceof FragmentActivity) {
((FragmentActivity)activity).getSupportFragmentManager();
}
unregisterActivityLifecycleCallbacks(this);
}
...
あなたのコンテキストオブジェクトは、常に直接活動にキャストすることはできませんので、これを
@Nullable
public static Activity getActivityFromContext(@NonNull Context context){
while (context instanceof ContextWrapper) {
if (context instanceof Activity) return (Activity) context;
context = ((ContextWrapper)context).getBaseContext();
}
return null; //we failed miserably
}
DialogFragmentには問題のビューが含まれています。私は基本的に、現在選択されているボタンに基づいてセクションに分割されたDialogFragmentを持っており、適切なビューを表示します。私は各表示可能なセクションをそれ自身のビューに分割しました。私はフラグメントを使用していましたが、フラグメント内にフラグメントを埋め込むことはできません。 – Steve
私はIDでビューを見つけ、アクティビティへの参照を渡します。 – Steve
DialogFragmentがビューのスワップを処理するだけではないのはなぜですか?それはあなたがやろうとしているものと同じように複雑に思えるようです。 – DeeV