2016-04-03 34 views
0

Ben Navigasyon Çekmecesini kullanıyorum gelmekAndroid onBackPressed() Benim Projesinde önceki Parçası/Etkinlik

Projem bana bazı Fragment Dosya ve ayrıca bazı Aktivite Dosyalar

Sadece ne olursa olsun dosya gerekebilir içeren onBackPressed() o etkinliğe önceki fragmana gelip tersi Örneğin

olmalıdır:

BAŞLANGIÇ: MainActivity > Fragment > Fragment > Activity

onBackPressed(): Activity > Fragment > Fragment > MainActivity --- Sonra Çıkışta ile dialogBox or Not

Diğer StackOverflow Mesajlardan bazı yöntemler denedi, ancak bir tek yazı Benim için


, denedim çalıştı Örnek

@Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } 
     else { 
      HomeFragment fragment = new HomeFragment(); 
      android.support.v4.app.FragmentTransaction fragmentTransaction = 
        getSupportFragmentManager().beginTransaction(); 
      fragmentTransaction.replace(R.id.fragment_container, fragment); 
      fragmentTransaction.commit(); 

      if (getFragmentManager().getBackStackEntryCount() == 0) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(this); 
       builder.setCancelable(false); 
       builder.setMessage("Do you want to Exit?"); 
       builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         //if user pressed "yes", then he is allowed to exit from application 
         finish(); 
        } 
       }); 
       builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         //if user select "No", just cancel this dialog and continue with app 
         dialog.cancel(); 
        } 
       }); 
       AlertDialog alert = builder.create(); 
       alert.show(); 
      } 
     } 

    } 
+0

addToBackstack yöntemini denediniz mi? – Krish

+0

bunu nasıl uygular .. ??? Lütfen üst kodu düzenleyebilirsiniz – Vitesh

+0

Sadece bu yeri düzenlemek için değil. Başlangıçtan itibaren düzenlemelidir. Fragment1'den Fragment2'ye gelmek için örnek, backstack'e değiştirme işlemini eklemelisiniz. – Krish

cevap

0

sen t taahhüt/eklediğinizde/addToBackStack çağrı değiştirmeniz gerekiyor o parçalanmış işlem. Bir bağlantıyı veya bir düğmeyi tıklattığınızda veya navigasyonunuzu yaptığınızda, bu noktada, yeni parçanız ne olursa olsun varolan parçayı değiştirerek bir parça işlemi başlatmanız gerekir. Hareketi tamamlamak önce önemlisi, addToBackStack gereken

o backstack için geçerli parçasını eklemek, bu yüzden kullanıcı yeni fragmanı geri düğmesine bastığında, önceki parçanın geri alınmasını ne yapar

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

fragmentTransaction.replace(R.id.fragment_container, new_fragment_class).addToBackStack(null).commit(); 

Şu anda yaptığınız gibi onBackPressed yönteminde bunu yapmazsınız, ancak kullanıcı nav çekmecenizdeki bir şeyi tıklattığında. Dolayısıyla, gezinme menü öğelerinizde kullanıcı tıklamalarını yakalamanın bir yoluna ihtiyacınız var. Örneğin: (yukarıda) ile yerinde fiili backstack sahip olduktan sonra sizin if (getFragmentManager().getBackStackEntryCount() == 0... kod çalışması gerekir gibi

public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    switch (id) { 
     case R.id.nav_new: 
      //do your add/replace fragment transaction here 
      break; 
    }  
} 

görünüyor. Bu sadece şimdiki backstack herhangi öğeleri olup olmadığını kontrol edin ve eğer bir iletişim kutusu gösterir

DÜZENLEME:

İşte

Bir nav çekmece parçası işlemleri nasıl ele bir örnek:

public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 


    NavigationView navigationView = null; 
    Toolbar toolbar = null; 
    FragmentManager fragmentManager = getSupportFragmentManager(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 

     //set initial fragment to 'new' instead 
     addFragment(new NewFragment(), true); 

     //Set the toolbar 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     //Set navigation drawer 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      //put your alert dialog code here 
      //if (getFragmentManager().getBackStackEntryCount() == 0) ... 
     } 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 
     // Replace these with your own menu items 
     switch (id) { 
      case R.id.nav_start: 
       addFragment(new StartFragment(), true); 
       break; 
      case R.id.nav_save: 
       addFragment(new SaveFragment(), true); 
       break; 
      case R.id.nav_raw: 
       addFragment(new RawFragment(), true); 
       break; 
      case R.id.nav_gyroscope: 
       addFragment(new GyroscopeFragment(), true); 
       break; 
     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 

    public void addFragment(Fragment fragment, Boolean addToBackStack) { 
     if (fragment != null) { 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

      fragmentTransaction.replace(R.id.fragment_container, fragment, fragment.getClass().getSimpleName()) 
         .addToBackStack(null) 
         .commit(); 
     } 
    } 
} 
+0

Yaptıklarınız ve nelerin işe yaramadığı konusunda çok daha spesifik olmanız gerekir. Orijinal kodunuzu – Simon

+0

numaralı yeni kod ile güncelleyin. Çalıştığınız bir örnek için düzenlemeye bakın (sizin adınıza çalışmasını sağlamak için değişken adlarını vb. Değiştirmeniz gerekir) – Simon

+0

çalışmayan bir broştur :-( – Vitesh

İlgili konular