読者です 読者をやめる 読者になる 読者になる

【Android】ダイアログはDialogFragmentを実装する

 

DialogFragmentを実装する場合

----------------------------------------------------------------------------------------------------------

ダイアログの実装側のクラス

public class Dialog extends DialogFragment

            implements DialogInterface.OnClickListener {

  // 選択肢のリスト
  private String[] menulist = {"登録","削除"};

 

  public static Dialog newInstance(Fragment fragment) {
    Dialog dialog = new Dialog();
    dialog.setTargetFragment(fragment, 0);
    return dialog;
  }
  @Override
  public android.app.Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
    //alert.setTitle("メニュー");//タイトル

    //ダイアログタイトル文字色を変更したい場合
    alert.setTitle(Html.fromHtml("<font color='#000000'>メニュー</font>"));
    alert.setItems(menulist, this);//リスト
    return alert.create();
  }
  @Override
  public void onClick(DialogInterface dialog, int which) {
    DaialogListener listener = (DaialogListener)this.getTargetFragment();
    switch(which) {
      case 0:
        listener.onRegistClick();//コールバックの実装(登録)
        break;
      case 1:
        listener.onDeleteClick();//コールバックの実装(削除)
        break;
    }
  }
  public interface DaialogListener {//コールバックの定義
    void onRegistClick();
    void onDeleteClick();
  }
}

 

----------------------------------------------------------------------------------------------------------

ダイアログの呼び出し側のクラス

public class MainFragment extends Fragment implements, View.OnClickListener, Dialog.DaialogListener {
  

  @Override
  public void onClick(View v) {
    FragmentManager fm = getFragmentManager();
    Dialog dialog = Dialog.newInstance(this);
    dialog.show(fm, "");//ダイアログ呼び出し
  }
  @Override
  public void onRegistClick() {//ダイアログからのコールバックの実装(登録)
    Toast.makeText(getActivity(), "登録", Toast.LENGTH_LONG).show();
  }
  @Override
  public void onDeleteClick() {//ダイアログからのコールバックの実装(削除)
    Toast.makeText(getActivity(), "削除", Toast.LENGTH_LONG).show();
  }
}

f:id:stanleyblenz:20161030162634p:plain

 

 

 

f:id:stanleyblenz:20161030162706p:plain

 

 

f:id:stanleyblenz:20161030162812p:plain

f:id:stanleyblenz:20161030162812p:plain

 

 

 

 

----------------------------------------------------------------------------------------------------------

DialogFragmentを実装しない場合

自分のクラス内でダイアログを表示する場合

 

AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
alert.setTitle("登録完了");
alert.setMessage("登録完了が完了しました。");
alert.setPositiveButton("OK", null);

 

alert.setPositiveButton("OK", this); ※OKボタンクリックをひろう場合

@Override
public void onClick(DialogInterface dialog, int which) {
  Toast.makeText(activity, "OK", Toast.LENGTH_SHORT).show();
  return;
}

 

f:id:stanleyblenz:20161030163615p:plain

 

----------------------------------------------------------------------------------------------------------

 

▼AlertDialogのテーマ変更(styles.xmlを使う場合)
styles.xml
<resources>
  <style name="AlertTheme" parent="android:Theme.Material.Light">
  </style>
</resources>

 

AlertDialog.Builder alert = new AlertDialog.Builder(new ContextThemeWrapper(activity, R.style.AlertTheme));

 

以上です。