2016-06-06 13 views
0

Ich bin auf der Suche nach einer Möglichkeit, ein "Sind Sie sicher, dass Sie fertig sind?" Wenn der Benutzer während der Bearbeitung der Notiz auf die Zurück-Navigationstaste drückt und das Notenfragment hinzufügt, aber nicht, während sie sich auf dem Fragment der Ansichtsnotiz befinden, wird die Alarmbox eingeblendet. Im Folgenden habe ich einen Code aus der Aktivität hinzugefügt, mit der jedes Fragment verknüpft ist. Wenn Sie mehr Code aus verschiedenen Bereichen benötigen, lassen Sie es mich wissen.Lassen Sie eine OnBackPressed() - Alarmbox nur für 2 der 3 Fragmente erscheinen

public class NoteDetailActivity extends AppCompatActivity { 


    public static final String NEW_NOTE_EXTRA = "New Note"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_note_detail); 
     createAndFragment(); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(false); 
     getSupportActionBar().setHomeButtonEnabled(false); 


    } 


    private void createAndFragment(){ 

     Intent intent = getIntent(); 
     MainActivity.FragmentToLaunch fragmentToLaunch = (MainActivity.FragmentToLaunch) intent.getSerializableExtra(MainActivity.NOTE_FRAGMENT_TO_LOAD_EXTRA); 

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

     switch(fragmentToLaunch){ 
      case EDIT: 
       NoteEditFragment noteEditFragment = new NoteEditFragment(); 
       setTitle(R.string.edit_fragment_title); 
       fragmentTransaction.add(R.id.note_container, noteEditFragment, "NOTE_EDIT_FRAGMENT"); 
       break; 
      case VIEW: 
       NoteViewFragment noteViewFragment = new NoteViewFragment(); 
       setTitle(R.string.view_fragment_title); 
       fragmentTransaction.add(R.id.note_container, noteViewFragment, "NOTE_VIEW_FRAGMENT"); 
       break; 
      case CREATE: 
       NoteEditFragment noteCreateFragment = new NoteEditFragment(); 
       setTitle(R.string.create_fragment_title); 

       Bundle bundle = new Bundle(); 
       bundle.putBoolean(NEW_NOTE_EXTRA, true); 
       noteCreateFragment.setArguments(bundle); 

       fragmentTransaction.add(R.id.note_container, noteCreateFragment, "NOTE_CREATE_FRAGMENT"); 
       break; 

     } 

     fragmentTransaction.commit(); 

    } 
    @Override 
    public void onBackPressed() { 
     new AlertDialog.Builder(this) 
       .setMessage("Are you sure you want to exit?") 
       .setCancelable(false) 
       .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         NoteDetailActivity.this.finish(); 
        } 
       }) 
       .setNegativeButton("No", null) 
       .show(); 
    } 
} 

Antwort

1

dies durch den Fragment-Tag

get-Tag wie diese

Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.main_container); 
      String tag = fragment.getTag(); // This will return the tag of fragment 

dann verwenden, wenn-sonst die Aufgabe

if (tag.equalsIgnoreCase("Home")) { 
// Open aLERT box 
}else if (tag.equalsIgnoreCase("Home2")) { 
// Open aLERT box 
}else if (tag.equalsIgnoreCase("Home2")) { 
// Open aLERT box 
}else{ 
// dO STUFF HERE 
} 

zu tun Vergessen Sie nicht immer um das Etikett des Fragments

hinzuzufügen
+0

perfekt –

+0

gearbeitet verwenden Happy to Hilfe Prost !!! –

0

Versuchen Sie zunächst einmal, keine statischen Tags als Namen des Fragments zu verwenden. Stattdessen können Sie den Namen des Fragments als ABCFragment.class.getSimpleName() festlegen.

nun für die Kontrollen auf Dialoge, erstellen Sie eine Methode

/** 
* This method is used to get the top fragmnet on the stack 
* 
* @return {@link Fragment} 
*/ 
protected final Fragment getTopFragmentStack() { 
    FragmentManager fm = getSupportFragmentManager(); 
    Fragment fragment = null; 
    for (int entry = 0; entry < fm.getBackStackEntryCount(); entry++) { 
     fragment = fm.findFragmentByTag(fm.getBackStackEntryAt(entry) 
       .getName()); 
    } 
    return fragment; 
} 

Danach welches Fragment prüfen zur Zeit sichtbar ist, können Sie den folgenden Code

Fragment topRunningFragment = getTopFragmentStack(); 
    if (topRunningFragment instanceof ABCFragment) { 
     showDialog(); 
    } else if (topRunningFragment instanceof ABCDFragment) { 
     showDialog(); 
    } else if (topRunningFragment instanceof ABCDEFragment) { 
     // Do nothing 
    }