findFragmentById возвращает ноль

У меня есть активность с навигационным ящиком и пустым макетом. При создании действия я отображаю фрагмент (в пустом макете действия). Идентификатор фрагмента dateVehicleMainContent, При выборе элементов навигации я отображаю другие фрагменты. Когда нажата кнопка назад, он возвращается к предыдущему фрагменту.

Я хочу отобразить диалог выхода из системы, когда текущий фрагмент является первым фрагментом, который я отобразил (dateVehicleMainContent). Отображается при нажатии кнопки Назад для каждого фрагмента. Я не хочу, чтобы он отображался в других фрагментах, которые занимают пустой макет действия. Поэтому я использую findFragmentById, Может, это не работает, потому что я отображаю фрагмент в пустой макет 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">

1 ответ

Хорошо, дай мне попробовать что-то вроде этого. Это не очень полный пример, и он не компилируется, потому что он использует мой собственный код (классы), но он очень хорошо демонстрирует подход.

String title = getIntent().getStringExtra(EXTRA_TITLE);
tag = getIntent().getStringExtra(EXTRA_FRAGMENT_TAG);
FilterFragment currentFragment = null;

        if (tag.equals(FragmentMyWishlist.TAG)) {
            currentFragment = (FilterFragment) getSupportFragmentManager().findFragmentByTag(FragmentMyWishlist.TAG);
        } else if (tag.equals(FragmentMyLibrary.TAG)) {
            currentFragment = (FilterFragment) getSupportFragmentManager().findFragmentByTag(FragmentMyLibrary.TAG);
        }

Возможно, вам не придется использовать getSupportFragmentManager() и может получить работу с getFragmentManager() но идея та же. Мне пришлось использовать SupportFragmentManager, потому что я использую import android.support.v4.app.Fragment;

РЕДАКТИРОВАТЬ:

FragmentMyWishlist имеет public static String TAG = "FragmentMyWishlist";FragmentMyLibrary имеет public static String TAG = "FragmentMyLibrary";

Другие вопросы по тегам