0

DialogFragment kullanarak özel bir iletişim oluşturmaya çalışıyorum, burada iletişim kutusunu görüntüleyemiyorum. Asıl sorun, geçersiz kodun çağrılmamasıdır. Bu sorunu düzeltebilir. Bu bÖzel DialogFragment çalışmıyor

@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

bir OnClickListener

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

cevap

0

iç:

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: İşte benim kodudur Dialog yapıcınızdaki değerleri belirlemek için reklam pratiği. Bunun yerine, değerlerinizi argümanlar olarak geçirin ve onları yeniden başlat geri çağırma üzerinde başlatın. Ayrıca, etkinliğinizin örneklerini parçanızda kaydetmekten kaçınacaksınız, bu durum bellek sızıntılarına yol açabilir. Bunun yerine, CustomDialog'unuzda veya BaseDialogFragmentinizde, bunları kullanan tüm etkinliklerin uygulanması gereken bir arabirim oluşturmanızı öneririm. Ardından, Dialog'unuzda onClickListener arayüzüne ihtiyacınız var ve bunun içinde mListener.onButtonClickListener()'u arayabilirsiniz. Örnek DialogFragment'a bakın.

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); 
} 
} 
:

Kişisel CustomDialog benzer görünümde olacaktır