2017-04-22 79 views
0

我對appbar和一個帶appbar的fullsecreen對話框片段(該對話框是從活動中調用的)有一個活性。 當按下活動的主頁按鈕時,我已經設置了一些操作,當按下對話框片段的主頁按鈕時,它應該關閉對話框。 我注意到兩個按鈕有相同的id(android.R.id.home)。而且當調用方法「onOptionsItemSelected」時會發生衝突,因爲當我按下對話框的home按鈕時,它不起作用,但是如果刪除活動上的代碼部分(如果id == android.R .id.home) 它工作正常,對話框關閉。 我該怎麼做?有沒有辦法來防止這種衝突,也許爲主頁按鈕設置一個不同的ID?活動主頁按鈕和Dialogfragment主頁按鈕ID之間的衝突

這是活動

public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_logout) { 
      exitApp(); 
      return true; 
     } 

     else if ((id == android.R.id.home) && searchActivated) { 
      drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); 
      toggle.syncState(); 
      searchActivated=false; 
      reload_fragment_data(); 
      return true; 
     } 
     else if ((id == android.R.id.home) && (!searchActivated)) 
     { 
      drawer.openDrawer(GravityCompat.START); // OPEN DRAWER 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 

    } 

的方法,這是dialogfragment

public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 

     if (id == R.id.action_next) { 
      pager.setCurrentItem(pager.getCurrentItem() + 1); 
      updateTitle(); 
      return true; 
     } else if (id==R.id.action_previous) 
     { 

      pager.setCurrentItem(pager.getCurrentItem() - 1); 
      updateTitle(); 
      return true; 
     } 

     else if (id == android.R.id.home) { 

      dismiss(); 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

回答

0

你可以申請,並嘗試在活動該解決方案的方法。

public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    Fragment fragment = getFragmentManager().findFragmentById(R.id.fragment_container); 
    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_logout) { 
     exitApp(); 
     return true; 
    } 

    else if ((id == android.R.id.home) && searchActivated && !(fragment instanceof DialogFragmentClassName)) { 
     drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); 
     toggle.syncState(); 
     searchActivated=false; 
     reload_fragment_data(); 
     return true; 
    } 
    else if ((id == android.R.id.home) && (!searchActivated)) 
    { 
     drawer.openDrawer(GravityCompat.START); // OPEN DRAWER 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 

}