0

dialogFragmentを使用してカスタムダイアログを作成しようとしていますが、ここではダイアログを表示できません。主な問題は、オーバーライドされたコードが呼び出されていないことです。誰でもこの問題を解決できますか?それがBであるカスタムDialogFragmentが機能しない

@SuppressLint("ValidFragment") 
public class CustomDialog extends BaseDialogFragment { 
    private String message; 
    private btnOkClick okClickListerner; 
    private TextView simpleMsg; 
    private WebView termsConditionWeb; 
    private Button okBtn; 
    Boolean isNormalDialog = false; 
    private Typeface fontClanProBold; 
    private View v; 
    private Context context; 

    public interface btnOkClick{ 
     void clicked(); 
    } 

    public CustomDialog(String message, btnOkClick okClickListerner, Boolean isNormalDialog){ 
     this.message = message; 
     this.okClickListerner = okClickListerner; 
     this.isNormalDialog = isNormalDialog; 
     this.mActivity = null; 
     setLayoutId(R.layout.activity_custom_dialog); 
     initViews(v); 
      } 

    @Override 
    public void initViews(View v) { 
     super.initViews(v); 
     this.simpleMsg = (TextView) v.findViewById(R.id.simpleMsg); 
     this.termsConditionWeb= (WebView) v.findViewById(R.id.termsConditionWeb); 
     this.okBtn = (Button) v.findViewById(R.id.okBtn); 
     fontClanProBold = Typeface.createFromAsset(context.getAssets(), "fonts/ufonts.com_clanpro-bold.ttf"); 
     Log.e("isNormal", isNormalDialog.toString()); 
     if(isNormalDialog){ 
      this.simpleMsg.setVisibility(View.VISIBLE); 
      this.simpleMsg.setText(message); 
      this.simpleMsg.setTypeface(fontClanProBold); 
     } else { 
      this.termsConditionWeb.setVisibility(View.VISIBLE); 
      this.termsConditionWeb.loadData(message, "text/html", "UTF-8"); 
     } 
     setCancelable(false); 
     initEvent(v); 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     this.mActivity = activity; 
    } 

    private void initEvent(View v){ 
     okBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(okClickListerner != null){ 
        okClickListerner.clicked(); 
       } 
       dismiss(); 
      } 
     }); 
    } 

    public static void ShowDialog(FragmentManager fm, String message, btnOkClick okClickListerner, Boolean isNormalDialog){ 
     CustomDialog dialog = new CustomDialog(message, okClickListerner, isNormalDialog); 
     dialog.show(fm, ""); 
    } 
} 

MainActivity.java

onClickListener

CustomDialog.ShowDialog(getSupportFragmentManager(), getResources().getString(R.string.message_register), new CustomDialog.btnOkClick() { 
        @Override 
        public void clicked() { 
         finish(); 
        } 
       }, isNormalDialog); 

答えて

0

内側:

BaseDialogFragment.java

public class BaseDialogFragment extends DialogFragment { 
    private int layoutId; 
    protected Activity mActivity; 

    public void setLayoutId(int layoutId){ 
     this.layoutId = layoutId; 
    } 

    public BaseDialogFragment(){ 

    } 

    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setStyle(BaseDialogFragment.STYLE_NO_TITLE, R.style.share_dialog); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState){ 
     View v = inflater.inflate(layoutId, container, false); 
     return v; 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     mActivity = activity; 
    } 

    public void initViews(View v){ 
     getDialog().setCanceledOnTouchOutside(true); 
    } 
} 

CustomDialog.java:ここに私のコードですDialogコンストラクタ内に値を設定する広告練習。代わりに引数として値を渡し、onCreateコールバックでそれらの値を初期化します。さらに、あなたの断片のあなたの活動のインスタンスを保存しないでください、それはメモリリークにつながる可能性があります。代わりに、CustomDialogまたはBaseDialogFragmentに、それらを使用するすべてのアクティビティが実装する必要があるインターフェイスを作成することをお勧めします。 DialogのonClickListenerインターフェイスを実装する必要があります。その内部にはmListener.onButtonClickListener()を呼び出すことができます。例DialogFragmentを参照してください。

public class CustomDialog extends BaseDialogFragment { 

private myFragmentInterface mListener; 

public static CustomDialog newInstance(String message, Boolean isNormalDialog){ 
    Bundle args = new Bundle(); 
    args.putString(MESSAGE_ARG_KEY, message); 
    args.putBoolean(TYPE_ARG_KEY, isNormalDialog); 
    CustomDialog instance = new CustomDialog(); 
    instance.setArguments(args); 
} 

@override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    message = getArguments().getStirng(MESSAGE_ARG_KEY); 
    isNormalDialog = getArguments().getBoolean(TYPE_ARG_KEY); 
} 

@override 
public void onAttach(Activity activity){ 
    super.onAttach(); 
    try{ 
     mListener = (myFragmentInterface) activity; 
    }catch(ClassCastException e){ 
     throw new ClassCastException("activiy must implement myFragmentInterface"); 
    } 
} 

public void onDetach(){ 
    super.onDetach(); 
    mListener = null; 
} 

public interface myFragmentInterface{ 
    onButtonClickListener(String... params); 
} 
} 

あなたCustomDialogは、次のようになります

関連する問題