2016-11-18 4 views
-1

Я имею DialogFragment как это,Как определить нажатие кнопки в действии из диалогового окна оповещения, присутствующего во фрагменте?

public class Dfragment extends DialogFragment { 

    public Dfragment() { 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 

     AlertDialog.Builder ab = new AlertDialog.Builder(getActivity()); 
     ab.setMessage("Delete Everything").setTitle("DELETE DB") 
       .setPositiveButton("OK",new DialogInterface.OnClickListener() 
       { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
        } 
       }) 

       .setNegativeButton("CANCEL",new DialogInterface.OnClickListener() 

       { @Override 
        public void onClick(DialogInterface dialog, int which) {   } 
       }); 


     return ab.create(); 
    } 

} 

я могу обнаружить положительный/отрицательный внутри фрагмента, но как я могу обнаружить его от деятельности, откуда она была вызвана.

Вот код реализуется в деятельности,

Dfragment frag = new Dfragment(); 
     frag.show(getFragmentManager(),"THISDIALOG"); 

Таким образом, в деятельности Как определить, какая кнопка была нажата?

Вещи, которые я пытался до сих пор,

Из приведенного выше фрагмент кода,

setPositiveButton ("OK", NULL) заменить в коде выше, но до сих пор не работает.

Какой код мне нужно изменить, чтобы он работал по желанию?

EDIT 1:

Я знаю, что это может быть достигнуто с помощью интерфейсов, но я хотел бы сделать это без этого.

+0

как обычно 1. ПОЛУЧИТЬ деятельности, 2. приведение к интерфейсу 3. Вызвать метод из интерфейса и прохода, который нажал кнопку ... – Selvin

+1

Возможный дубликат [Связь между фрагментом и деятельности - лучшие практики .] (http://stackoverflow.com/questions/14247954/communicating-between-a-fragment-and-an-activity-best-practices) – Selvin

+0

@Selvin Отредактировал мой вопрос. –

ответ

2

У меня есть один suggetion для вас. Вы можете сделать так:

public abstract class Dfragment extends DialogFragment { 

    public Dfragment() { 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 

     AlertDialog.Builder ab = new AlertDialog.Builder(getActivity()); 
     ab.setMessage("Delete Everything").setTitle("DELETE DB") 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         onPositiveButtonClick(); 
        } 
       }) 

       .setNegativeButton("CANCEL", new DialogInterface.OnClickListener() 

       { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         onNegativeButtonClick(); 
        } 

       }); 


     return ab.create(); 
    } 

    public abstract void onPositiveButtonClick(); 

    public abstract void onNegativeButtonClick(); 

} 

И создать объект

Dfragment frag = new Dfragment() { 
    @Override 
    public void onPositiveButtonClick() { 

    } 

    @Override 
    public void onNegativeButtonClick() { 

    } 
}; 
frag.show(getFragmentManager(),"THISDIALOG"); 
0

Вам не нужно его обнаруживать из-за активности. Просто напишите, какой бы ваш код не был в этих слушателях, и звоните так же, как вы звоните. например ..

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    AlertDialog.Builder ab = new AlertDialog.Builder(getActivity()); 
    ab.setMessage("Delete Everything").setTitle("DELETE DB") 
      .setPositiveButton("OK",new DialogInterface.OnClickListener() 
      { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        Log.d("log", "this will log anyway"); 
       } 
      }) 

      .setNegativeButton("CANCEL",new DialogInterface.OnClickListener() 

      { @Override 
       public void onClick(DialogInterface dialog, int which) {   } 
      }); 


    return ab.create(); 
} 

кроме этого, если вы хотите сделать любую вещь еще, чем вы должны реализовать callback

удачи

+0

Чувак обычный, разве я этого не знаю. Мой вопрос заключался в том, как обнаружить это из основной деятельности? –

0

интерфейс для этого,

public class Dfragment extends DialogFragment { 

Clicks objclick; 

public Dfragment() { 
} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    AlertDialog.Builder ab = new AlertDialog.Builder(getActivity()); 
    ab.setMessage("Delete Everything").setTitle("DELETE DB") 
      .setPositiveButton("OK",new DialogInterface.OnClickListener() 
      { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        obj.onclick(); 
       } 
      }) 

      .setNegativeButton("CANCEL",new DialogInterface.OnClickListener() 

      { @Override 
       public void onClick(DialogInterface dialog, int which) {   } 
      }); 


    return ab.create(); 
} 

public void clicklistner(Clicks click){ 
    objclick=click; 
} 


    } 

сделать интерфейс,

public interface Clicks{ 
    public void onclick(); 
} 

вызова метода clicklistner из вашего деятельность,

frag.clicklistner(new.... 
+0

Пожалуйста, внимательно прочитайте мой вопрос. Я не хочу использовать интерфейс. –

+0

Извините, в этом случае выполните следующие действия: http://stackoverflow.com/a/40677097/3940292 –

 Смежные вопросы

  • Нет связанных вопросов^_^