DialogFragment

DialogFragment е фрагмент, използван за показване нс модален прозорец в рамките на Activity, която стой над останалата част от съдържанието.

Всеки java клас на фрагмент, импортиран да използва пространството на имената, а пространството на имената. Ако всички внесени клас (FragmentManager, DialogFragment и т.н.) използва пространство на имената, ще възникнат грешки за компилиране-време.androidx.fragment.appandroid.appandroid.app

  1. XML файл за оформлението на диалоговия прозорец. Фрагмент може да се създаде с десен бутон на app -> New -> Fragment -> Fragment (Blank)

2. Свързвания Java класа трябва да наследи базовия клас DialogFragment.

public class EditNameDialogFragment extends DialogFragment {

	private EditText еditText;

    // Задължително е да има празен конструктор
	public EditNameDialogFragment() { }
	
    // Метод за създаване на EditNameDialogFragment обект с данни
	public static EditNameDialogFragment newInstance(String title) {
		EditNameDialogFragment frag = new EditNameDialogFragment();
		Bundle args = new Bundle();
		args.putString("title", title);
		frag.setArguments(args);
		return frag;
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		return inflater.inflate(R.layout.fragment_edit_name, container);
	}

	@Override
	public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
		super.onViewCreated(view, savedInstanceState);
		// Извличане на елементите от изгледа
		еditText = view.findViewById(R.id.editText);
		// Поставяне на заглавие
		String title = getArguments().getString("title", "Enter Name");
		getDialog().setTitle(title);
		// Фокуситане на курсора за писане върху еditText
		еditText.requestFocus();
        // Автоматично показване на клавиятурата
		getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
	}
}

3. Показване на диалоговия прозорец

public class MainActivity extends AppCompatActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
    FragmentManager fm = getSupportFragmentManager();
    EditNameDialogFragment editNameDialogFragment = EditNameDialogFragment.newInstance("Title");
    editNameDialogFragment.show(fm, "fragment_edit_name");
  }
}

4. Предаване на данни към Activity

За предаване на данни от Fragment към Activity, се създава персонализиран слушател:

  • Създава се интерфейс с методи, които могат да се извикат за предаване на резултата от Fragment към Activity

  • Имплементиране на интерфейс слушател от Fragment класа и поставяне на дайствие за визуалния обект, след което да се изпрати резултат към Activity

  • Имплементиране на интерфейса в Activity към което ще се предават данните.

Last updated