2016-11-10 11 views
0

アクティビティのいくつかのメソッドを呼び出すことによって、アクティビティのコンテナ(FrameLayout)にフラグメントを追加できるようにしようとしています。だからここAndroidの別のクラスのアクティビティにフラグメントを追加する方法

が私の活動のクラスの簡易版である:

public class TermsAndConditionsActivity extends AppCompatActivity { 

private static TermsAndConditionsActivity   instance; 
private static boolean        loggedIn; 
private TermsAndConditionsListener     termsAndConditionsListener; 

private TermsAndConditionsFragment     termsAndConditionsFragment; 
private ReadTermsAndConditionsFragment    readTermsAndConditionsFragment; 
private Terms          terms; 
private User          user; 
protected FragmentManager       fragmentManager; 

public TermsAndConditionsActivity() {} 

public static TermsAndConditionsActivity getInstance(Terms terms, User user, boolean loggedIn, TermsAndConditionsListener termsAndConditionsListener) { 
    if (instance == null) { 
     instance       = new TermsAndConditionsActivity(); 
     instance.terms      = terms; 
     instance.user      = user; 
     instance.loggedIn     = loggedIn; 
     instance.termsAndConditionsListener = termsAndConditionsListener; 
    } 
    return instance; 
} 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    super.setContentView(R.layout.activity_main_activity_no_drawer); 
    fragmentManager = getSupportFragmentManager(); 
    prepareReadTermsAndConditionsFragment(); 
    prepareTermsAndConditionsFragment(); 
} 

private void prepareTermsAndConditionsFragment() { 
    if (termsAndConditionsFragment == null) { 
     if (loggedIn) { 
      termsAndConditionsFragment = TermsAndConditionsOnlineFragment.newInstance(termsAndConditionsListener); 
     } else { 
      termsAndConditionsFragment = TermsAndConditionsAnonymousFragment.newInstance(termsAndConditionsListener); 
     } 
    } 
} 
private void prepareReadTermsAndConditionsFragment() { 
    if (readTermsAndConditionsFragment == null) { 
     readTermsAndConditionsFragment = ReadTermsAndConditionsFragment.newInstance(terms, user, termsAndConditionsListener); 
    } 
} 

public void openTermsAndConditions() { 
    initFragment(termsAndConditionsFragment); 
} 

public void openReadTermsAndConditions() { 
    initFragment(readTermsAndConditionsFragment); 
} 

private void initFragment(TermsAndConditionsFragment fragment) { 
    if (fragment != null) { 
     FragmentTransaction ft = getFragmentTransaction(); 
     ft.add(getContainerId(), fragment, fragment.getTagString()).commit(); 
    } 
} 

protected FragmentTransaction getFragmentTransaction() { 
    FragmentTransaction ft = fragmentManager.beginTransaction(); 
    ft.setCustomAnimations(R.anim.fade_in, R.anim.fade_out); 
    return ft; 
} 

public static void startActivity(Context context, int flags) { 
    if (context != null) { 
     Intent launchIntent     = getIntent(context, flags); 
     context.startActivity(launchIntent); 
    } 
} 

public static Intent getIntent(Context context, int flags) { 
    Intent launchIntent = new Intent(context, TermsAndConditionsActivity.class); 
    launchIntent.addFlags(flags); 
    return launchIntent; 
} 
} 

アクティビティクラスは、基本的断片を保持するためでframeLayoutある活動、のレイアウトを作成するために正常に動作します。

問題は、私が "openTermsAndConditions()"というメソッドをアクティビティクラスの外から呼び出すと、何も起こりません。しかし、アクティビティクラスのonCreateから呼び出すと、正しく追加されます。 アクティビティクラスの外からこれらを追加したいと考えています。

誰かが私を助けてくれることを願っています。

ご協力いただきますようお願い申し上げます。

答えて

0

グローバルなインスタンスを作成しないとメモリが浪費され、必要なメソッドのスコープ内でのみ作成されます。その場合はフラグメントインスタンスをグローバルに使用する必要はありません。

この

public void addYourFragment() 
{ 
    Fragment fragment = getSupportFragmentManager.findFragmentByTag(TermsAndConditionsFragment.class.getSimpleName()); 
    if(fragment == null) 
    { 
    fragment = new TermsAndConditionsFragment(); 
    } 
    if(fragment not added) 
    { 
    //call you initFragment,remove the first line in that and pass the Fragment parameter 
    initFragment(Fragment fragment) 
    { 
     //do add or replace and make this common method for all your fragments to be added don't use too many methods for each diff fragments to be added 
     } 
} 
をお試しください
関連する問題