2017-10-02 10 views
2

私のダイアログのフラグメントは以下のコードのようです。AndroidでDialogFragmentの結果を取得するにはどうすればよいですか?

public class PromoCodeDialogFragment extends BaseDialog implements           View.OnClickListener { 
private Test mBinding; 

private String mHeader; 
private String mVehicleNumber; 

public static PromoCodeDialogFragment newInstance(String mHeader, String mVehicleNumber) { 
    PromoCodeDialogFragment dialog = new PromoCodeDialogFragment(); 
    dialog.mHeader = mHeader; 
    dialog.mVehicleNumber = mVehicleNumber; 
    return dialog; 
} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 

    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
    getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent); 

    mBinding = DataBindingUtil.inflate(inflater, R.layout.test, container, false); 

    mBinding.title.setText(mHeader); 
    setCancelable(true); 

    mBinding.submit.setOnClickListener(this); 
    mBinding.cancel.setOnClickListener(this); 

    return mBinding.getRoot(); 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 
} 

@Override 
public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.submit: 
      submit(); 

      break; 

     case R.id.cancel: 
      dismiss(); 
      break; 
    } 
} 

ここで、送信ボタンを押した場合、結果はMainFragmentクラスで取得する必要があります。

私はこの

@Override 
public void onClick(View view, int position) { 
    SearchVehicleResponse.PromotionDetail promotionDetail = mPromoList.get(position); 
    if(hasActivity()) 
    PromoCodeDialogFragment.newInstance(promotionDetail.promotionOffer, mBinding.vehicleId.getText().toString()).show(getActivity().getSupportFragmentManager(), "promo"); 
} 

のように呼び出すDialogFragmentと呼ばれる今、私はPromoCodeDialogFragment内の送信ボタンをクリックすると、フラグメントのレスポンスを取得する必要があります。

+3

使用**インターフェイス**フラグメントおよびダイアログ –

答えて

1

フラグメントクラス:

public class MyFragment extends Fragment { 
int mStackLevel = 0; 
public static final int DIALOG_FRAGMENT = 1; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (savedInstanceState != null) { 
     mStackLevel = savedInstanceState.getInt("level"); 
    } 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("level", mStackLevel); 
} 

void showDialog(int type) { 

    mStackLevel++; 

    FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction(); 
    Fragment prev = getActivity().getFragmentManager().findFragmentByTag("dialog"); 
    if (prev != null) { 
     ft.remove(prev); 
    } 
    ft.addToBackStack(null); 

    switch (type) { 

     case DIALOG_FRAGMENT: 

      DialogFragment dialogFrag = MyDialogFragment.newInstance(123); 
      dialogFrag.setTargetFragment(this, DIALOG_FRAGMENT); 
      dialogFrag.show(getFragmentManager().beginTransaction(), "dialog"); 

      break; 
    } 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch(requestCode) { 
      case DIALOG_FRAGMENT: 

       if (resultCode == Activity.RESULT_OK) { 
        // After Ok code. 
       } else if (resultCode == Activity.RESULT_CANCELED){ 
        // After Cancel code. 
       } 

       break; 
     } 
    } 
} 

} 

DialogFragmentクラス:

public class MyDialogFragment extends DialogFragment { 

public static MyDialogFragment newInstance(int num){ 

    MyDialogFragment dialogFragment = new MyDialogFragment(); 
    Bundle bundle = new Bundle(); 
    bundle.putInt("num", num); 
    dialogFragment.setArguments(bundle); 

    return dialogFragment; 

} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    return new AlertDialog.Builder(getActivity()) 
      .setTitle(R.string.ERROR) 
      .setIcon(android.R.drawable.ic_dialog_alert) 
      .setPositiveButton(R.string.ok_button, 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int whichButton) { 
          getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, getActivity().getIntent()); 
         } 
        } 
      ) 
      .setNegativeButton(R.string.cancel_button, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_CANCELED, getActivity().getIntent()); 
       } 
      }) 
      .create(); 
} 
} 

私はそれがいっぱいに役立つ願っています!

1

次のようなインターフェイスを作成する必要があります。

public interface OnSubmitClickListener { 
    void onSubmitClicked(WhateverInfo info); 
} 

その後、あなたのダイアログにOnSubmitClickListenerを追加し、コンストラクタに追加します。

ダイアログクラスは次のように見えるように:

private String mHeader; 
private String mVehicleNumber; 
private OnSubmitClickListener listener; 

public static PromoCodeDialogFragment newInstance(String mHeader, String mVehicleNumber, OnSubmitClickListener listener) { 
    PromoCodeDialogFragment dialog = new PromoCodeDialogFragment(listener); 
    dialog.mHeader = mHeader; 
    dialog.mVehicleNumber = mVehicleNumber; 
    return dialog; 
} 

public PromoCodeDialogFragment (OnSubmitClickListener listener) { 
    this.listener= listener; 
} 

@Override 
public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.submit: 
      listener.onSubmitClicked(infoSomething); 

      break; 

     case R.id.cancel: 
      dismiss(); 
      break; 
    } 

とあなたのフラグメントは次のようになります。

PromoCodeDialogFragment.newInstance(promotionDetail.promotionOffer, mBinding.vehicleId.getText().toString(), new OnSubmitClickListener(){ 
     @Override 
     public void onSubmitClicked(WhateverInfo info) { 
      //get the info from here 
     } 
    }).show(getActivity().getSupportFragmentManager(), "promo"); 
+0

と通信するために私は、このメソッドを使用しますがダイアログの断片では、入力されたテキストフィールドの値をサーバーにポストする必要がありますが、どのようにしてこれを得ることができますか? とにかく、問題を解決するために@Alpeshメソッドを使用しました – CarinaMj

関連する問題