У меня есть активность с ящиком навигации и пустой макет. При создании действия я показываю фрагмент (в пустом макете активности). Идентификатор фрагмента - dateVehicleMainContent
. При выборе элементов навигации отображаются другие фрагменты. При нажатии назад возвращается к предыдущему фрагменту.findFragmentById возвращает null
Я хочу отобразить диалог выхода, когда текущий фрагмент является первым фрагментом, который я отобразил (dateVehicleMainContent
). Он отображается, когда нажимается назад для каждого фрагмента. Я не хочу, чтобы он отображался в других фрагментах, которые занимают пустой макет действия. Поэтому я использую findFragmentById
. MAybe это не работает, потому что я отображаю фрагмент в пустой макет Activity
.
DateTimePicker - это класс фрагментов.
Это Activity
с пустым макетом и с onBackPressed()
, чтобы проверить, если текущий фрагмент фрагмент с идентификатором dateVehicleMainContent
@Override
public void onBackPressed() {
Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.dateVehicleMainContent);
if (currentFragment instanceof DateTimePicker) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(DateVehiclePicker.this);
alertDialog.setTitle("Logout");
// Setting Dialog Message
alertDialog.setMessage("Do you want to Logout?");
alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
sessionManager.logoutUser();
}
});
alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
dialog.cancel();
}
});alertDialog.show();
} else {
super.onBackPressed();
}
}
макет своей деятельности по:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.prematixsofs.taxiapp.DateVehiclePicker">
<!-- The main content view -->
<RelativeLayout
android:id="@+id/mainContent"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<RelativeLayout
android:id="@+id/drawerPane"
android:layout_width="280dp"
android:layout_height="match_parent"
android:layout_gravity="start">
<!-- Profile Box -->
<RelativeLayout
android:id="@+id/profileBox"
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="#ff02c7c4"
android:padding="8dp">
<ImageView
android:id="@+id/avatar"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginTop="15dp"
android:src="@drawable/user" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="42dp"
android:layout_centerVertical="true"
android:layout_marginLeft="15dp"
android:layout_toRightOf="@+id/avatar"
android:orientation="vertical">
<TextView
android:id="@+id/userName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:textColor="#fff"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/viewProfile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginTop="4dp"
android:text="View Profile"
android:textColor="#fff"
android:textSize="12sp" />
</LinearLayout>
</RelativeLayout>
<!-- List of Actions (pages) -->
<ListView
android:id="@+id/navList"
android:layout_width="280dp"
android:layout_height="match_parent"
android:layout_below="@+id/profileBox"
android:background="#ffffffff"
android:choiceMode="singleChoice" />
</RelativeLayout>
Этих является частью макета фрагмента. Когда этот фрагмент отображается, я хочу показать диалоговое окно предупреждения для выхода:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/dateVehicleMainContent"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.looper.loop.DateTimePicker">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dateVehicleLinearLayoutMainContent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
Попробуйте использовать 'findFragmentByTag()' вместо этого и убедиться, что все фрагменты имеют метки:) Кроме того, уведомите родительскую активность с обратным вызовом из 'YourFragment.onDetach()', чтобы отобразить диалог. – Shark
@Shark Привет .. Я новичок в android. Можете ли вы предоставить мне ссылку с примером или ответом на примере? – Abhi
Я наклеил некоторый код, который у меня был рядом, чтобы проиллюстрировать подход. – Shark