Intereting Posts
Почему не прослушивается прослушиватель UtteranceProgress в тексте для речи? Какой документ является Play Store, ожидающий загрузки, чтобы показать, что я не выдаю себя за других? Преобразование растрового изображения в сепию в android Как добавить дату к версииNameSuffix по градле Как использовать 3G-соединение в приложении Android вместо Wi-Fi? Ошибка раздувания класса EditText при создании TextInputLayout на Android 4.4.2: Как добавить KmlLayer в M4B Google Map для бизнеса? Как использовать привязку данных для объединения строки из ресурсов с динамической переменной в XML? Дублировать файлы во время упаковки APK app-debug-unaligned.apk Как установить положение счетчика с кордорой Какова цель тега Android <merge> в XML-макетах? Как получить текст из текстового поля Android – Раздвижное меню с подменю Храните изображение в Blobstore от клиента android и извлекайте blobkey и загружайте URL-адрес для хранения в Datastore. – GAE Реализация нескольких фрагментов в одном действии Динамически

Как выполнить действие после щелчка по нажатой кнопке DialogFragment

Я создал следующий DialogFragment, полученный из документации Android:

Открытый класс PayBillDialogFragment расширяет DialogFragment {

@Override public Dialog onCreateDialog(Bundle savedInstanceState){ final Bundle b = this.getArguments(); // Use the Builder class for convenient dialog construction AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage("Paga bollettino") .setPositiveButton("Paga", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // FIRE ZE MISSILES! } }) .setNegativeButton("Cancella", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // User cancelled the dialog } }); // Create the AlertDialog object and return it return builder.create(); } } 

Из другого фрагмента (ListFragment), когда щелкнут строка списка, диалог DialogFragment должен быть открыт, и после нажатия положительной кнопки диалогового окна «Диалог» я хочу удалить выбранную строку списка, а также вызвать метод для Выполните удаленное действие, связанное с удалением. Я реализовал ListFragment следующим образом:

 public static class ListFragment extends android.support.v4.app.ListFragment { ArrayList<String> listItems=new ArrayList<String>(); ArrayAdapter<String> adapter; public static final String ARG_SECTION_NUMBER = "section_number"; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View rootView = inflater.inflate(R.layout.list_fragment_view, container, false); ListView lv = (ListView)rootView.findViewById(android.R.id.list); }}); adapter=new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_list_item_1, listItems); setListAdapter(adapter); return rootView; } @Override public void onListItemClick(ListView l, View v, int position, long id) { //opening the dialogfragment } } } 

Я не знаю, как обработать действие после нажатия кнопки «Добавить». Вы можете мне помочь?

EDIT: чтобы уточнить, это рабочий процесс: щелкните по списку -> покажите DialogFragment -> после нажатия на DialogFragment удалите элемент из списка.

Solutions Collecting From Web of "Как выполнить действие после щелчка по нажатой кнопке DialogFragment"

Так я обрабатываю связь между фрагментом и фрагментом диалога

Пример фрагмента:

 public class MainFragment extends Fragment { private static final int REQ_CODE = 1; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.main_fragment, container, false); Button b = (Button) v.findViewById(R.id.button); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { MyDialog dialog = new MyDialog(); dialog.setTargetFragment(MainFragment.this, REQ_CODE); dialog.show(getFragmentManager(), "dialog"); } }); return v; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { Toast.makeText(getActivity(), "Result: " + resultCode, Toast.LENGTH_SHORT).show(); super.onActivityResult(requestCode, resultCode, data); } } 

Пример DialogFragment:

 public class MyDialog extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage("My dialog message") .setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { notifyToTarget(Activity.RESULT_OK); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { notifyToTarget(Activity.RESULT_CANCELED); } }); return builder.create(); } private void notifyToTarget(int code) { Fragment targetFragment = getTargetFragment(); if (targetFragment != null) { targetFragment.onActivityResult(getTargetRequestCode(), code, null); } } } 

Это единственный метод, который я получил и при изменении ориентации.

У вас есть два варианта вызвать ListFragment из PayBillDialogFragment .

Сначала рекомендуется руководство Android. Все сообщения проходят через хостинг. Вот как вы получаете Activity хостинга, вызывая ((HostingActivity)PayBillDialogFragment.getActivity()).deleteItem() внутри PayBillDialogFragment.setPositiveButton(onClick()) . В HostingActivity.deleteItem() получите раздутый PayBillDialogFragment и вызовите в нем некоторый метод удаления.

См. http://developer.android.com/guide/components/fragments.html#EventCallbacks

Во-вторых . Вы можете просто DialogFragment.setTargetFragment() при создании объекта DialogFragment, а затем внутри PayBillDialogFragment.setPositiveButton(onClick()) вы можете получить PayBillDialogFragment помощью DialogFragment.getTargetFragment() и вызвать метод удаления там.

См. Обратный вызов фрагмента из диалогового окна

Для вызова диалога вы можете использовать это:

 android.support.v4.app.FragmentManager fm = getSupportFragmentManager(); if (fm.findFragmentByTag("PayBillDialogFragment") == null) { PayBillDialogFragment payBillDialogFragment = new PayBillDialogFragment(); payBillDialogFragment.show(fm, "PayBillDialogFragment"); } 

В вашем диалоговом окне диалога,

 setPositiveButton("Paga", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { //Add your code here that should execute //when positive button is clicked } }); 

Фрагмент списка будет использовать адаптер для отображения элементов. Адаптер требует ввода в виде некоторой коллекции. Итак, что вы можете сделать, когда пользователь нажимает кнопку ok на фрагменте диалога, и вы связываете это с фрагментом списка, вы можете удалить этот конкретный элемент из коллекции и снова установить Адаптер фрагмента списка с измененной коллекцией.