2017-02-24 11 views
0

私はアプリケーション内に1つのダイアログフラグメントを作成しました。以下はそのコードです。Androidのダイアログのフラグメントが破棄されない

public class AlertLoader extends DialogFragment { 

Typeface fontRegular; 


Bundle bundle; 

String displayText = ""; 

public static AlertLoader newInstance(@NonNull String displayText) { 
    AlertLoader alertPopUpMenu = new AlertLoader(); 

    Bundle args = new Bundle(); 
    args.putString("displayText", displayText); 
    alertPopUpMenu.setArguments(args); 

    return alertPopUpMenu; 
} 


@Override 
public void onStart() { 
    super.onStart(); 
    Dialog dialog = getDialog(); 
    if (dialog != null && dialog.getWindow() != null) { 
     dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 
    } 
} 

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    bundle = getArguments(); 
    setStyle(STYLE_NO_TITLE, R.style.LoaderDialogTheme); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    getDialog().setCanceledOnTouchOutside(false); 
    return inflater.inflate(R.layout.alert_dialog_loader, container, false); 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    init(view); 
} 

private void init(View mainView) { 
    displayText = bundle.getString("displayText"); 

    TextView mLoadingText = (TextView) mainView.findViewById(R.id.loadertext); 
    mLoadingText.setTextColor(Color.WHITE); 

    mLoadingText.setTypeface(fontRegular); 

    if (displayText == null || displayText.length() == 0) { 
     mLoadingText.setVisibility(View.GONE); 
    } else { 
     mLoadingText.setText(displayText); 
     mLoadingText.setVisibility(View.VISIBLE); 
    } 
} 

public void dismissCurrentView() { 
    getDialog().dismiss(); 

} 

} 

私は、ダイアログを表示するには、次のコードを使用しています。

private void showLoader(String displayText) { 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog"); 
    if (prev != null) { 
     ft.remove(prev); 
    } 
    ft.addToBackStack(null); 

    AlertLoader newFragment = AlertLoader.newInstance(displayText); 
    newFragment.show(ft, "dialog"); 
} 

それは正常に動作しています。私は次のコードでそれを却下しようとしています。

private void dismissLoader() { 
    Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog"); 
    if (prev != null) { 
     DialogFragment df = (DialogFragment) prev; 
     df.dismiss(); 
    } 
} 

次のアクティビティに移動する前にローダーを終了します。以下は私のコードですが、私はローダーを解雇しています。

dismissLoader(); 
    Intent intent = new Intent(getActivity(), ShareMediaActivity.class); 
    intent.putExtra(UserDefault.bundlePath, file.getAbsolutePath()); 
    startActivity(intent); 

以前のアクティビティに戻っても、ダイアログが表示されます。他のケースでは、このコードの表示と解除は正常に動作しています。

私はいくつかの方法でそれを却下しましたが、動作しませんでした。誰でもこれで私を助けることができましたか?

ありがとうございました。

+0

((PREV!= null)を)消すためにそのフィールドを使用するためのフィールドを作成しますか? – k0sh

+0

'AlertLoader'で' prev'をキャストしてみてください... –

+0

@ k0shはいそうです。 – Beena

答えて

1

DialogFragment

private AlertLoader newFragment; 

private void showLoader(String displayText) { 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog"); 
    if (prev != null) { 
     ft.remove(prev); 
    } 
    ft.addToBackStack(null); 

    newFragment = AlertLoader.newInstance(displayText); 
    newFragment.show(ft, "dialog"); 
} 

次のように次に、あなたのコードは、これまで、このラインの下に落ちるんDialogFragment

private void dismissLoader() { 
    if (newFragment != null) { 
     newFragment.dismiss(); 
    } 
} 
+0

このupvoteを提案しようとしていました –

+0

どこから 'showLoader()'メソッドを呼び出していますか – arjun

関連する問題