вы можете использовать dialogFragment как обычный фрагмент. взгляните на этот код из образцов. В этом коде он создает один диалогФрагмент и добавляет его в framlayout, а также показывает его как диалог при нажатии кнопки.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:padding="4dip"
android:gravity="center_horizontal"
android:layout_width="match_parent" android:layout_height="match_parent">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:layout_gravity="center_vertical|center_horizontal"
android:gravity="top|center_horizontal"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Demonstrates the same fragment
being shown as a dialog and embedded inside of an activity." />
<Button android:id="@+id/show_dialog"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_weight="0"
android:text="show">
<requestFocus />
</Button>
<View android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView
android:id="@+id/inline_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:layout_gravity="center_vertical|center_horizontal"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Fragment embedded inside
of the activity:" />
<FrameLayout
android:id="@+id/embedded"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:layout_gravity="center_vertical|center_horizontal"
android:padding="6dp"
android:background="#ff303030"
android:gravity="top|center_horizontal" />
</LinearLayout>
и код Java:
public class FragmentDialogOrActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_dialog_or_activity);
if (savedInstanceState == null) {
// First-time init; create fragment to embed in activity.
FragmentTransaction ft = getFragmentManager().beginTransaction();
DialogFragment newFragment = MyDialogFragment.newInstance();
ft.add(R.id.embedded, newFragment);
ft.commit();
}
// Watch for button clicks.
Button button = (Button)findViewById(R.id.show_dialog);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
showDialog();
}
});
}
void showDialog() {
// Create the fragment and show it as a dialog.
DialogFragment newFragment = MyDialogFragment.newInstance();
newFragment.show(getFragmentManager(), "dialog");
}
public static class MyDialogFragment extends DialogFragment {
static MyDialogFragment newInstance() {
return new MyDialogFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.hello_world, container, false);
View tv = v.findViewById(R.id.text);
((TextView)tv).setText("This is an instance of MyDialogFragment");
return v;
}
}
}
и для вашей ошибки вы можете использовать ниже код:
public static void showMyDialogFragment(FragmentManager fm){
FragmentTransaction ft = fm.beginTransaction();
Fragment prev = fm.findFragmentByTag("MyDialogFragment");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
DialogFragment newFragment = MyDialogFragment.newInstance();
newFragment.show(ft, "MyDialogFragment");
}
, как вы заметили, что я изменил имя тега, так что вы можете различать диалог фрагмент и обычный фрагмент, добавленные в ваш макет.
добавить некоторые дополнительные сведения, такие как код, сообщения об исключениях. и «контейнер по умолчанию» относится к пользовательскому диалоговому окну ..? – Pravin
Это общий вопрос. Я хочу иметь lockscreen поверх всего остального. Поэтому мне нужно поместить мои диалоговые окна в контейнер, который находится под строкой lockscreencontainer. – Kuno
блокировка экрана - это виджет, чтобы вызвать его при блокировке экрана. Мы используем getWindow(). AddFlags (WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); –