2016-05-19 64 views
14

Tôi đang sử dụng thanh công cụ tùy chỉnh. Tôi cần thêm nút quay lại vào nó. Bây giờ tôi đang sử dụng mã này để thêm nút quay lại.Cách triển khai nút Quay lại Thanh công cụ của Android

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); 
     toolbar.setBackgroundColor(getResources().getColor(R.color.white)); 
     toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.back_arrow)); 
     toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       onBackPressed(); 
      } 
     }); 

Điều này làm việc tốt. Tôi có thể thấy nút quay lại được thêm vào. Nhưng hãy xem xét trường hợp tôi đang ở trong Fragment1 mà không có nút quay lại. Bây giờ tôi chuyển sang Fragment2 và tôi thêm vào nút Back. Từ đoạn 2, tôi mở Fragment 3 và tôi thêm lại nút.

Bây giờ khi tôi nhấn nút quay lại từ đoạn 3 để quay lại đoạn 2, tôi phải kiểm tra ngăn xếp phân đoạn để xem liệu nút quay lại có được yêu cầu trong đoạn 2 hay không.

Có cách nào khác để xử lý nút quay lại tự động khi chúng tôi đẩy các đoạn để ngăn xếp không?

+0

Bạn có thể làm cho tôi rõ ràng hơn chính xác những gì bạn muốn? – Masum

+0

đã cập nhật câu hỏi của tôi – Zach

Trả lời

0

Bạn có thể xử lý biểu tượng trở lại rất dễ dàng. Nếu tất cả các mảnh vỡ của bạn là ở hoạt động duy nhất tôi thực sự khuyên bạn nên xử lý này với cách sau:

đầu tiên thùng một lớp BaseFragment trừu tượng mà thực hiện FragmentManager .OnBackStackChangedListener sau đó đưa phương pháp sau đây bên trong đó:

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

     mainActivity = (MainActivity) getActivity(); 

     getFragmentManager().addOnBackStackChangedListener(this); 

     shouldDisplayHomeUp(); 
    } 

    @Override 
    public void onBackStackChanged() { 
     shouldDisplayHomeUp(); 
    } 


    public boolean shouldDisplayHomeUp() { 
     //Enable Up button only if there are entries in the back stack 
     boolean canBack = false; 
     try { 
      canBack = getFragmentManager().getBackStackEntryCount() > 0; 
     } catch (Exception ex) { 
//   Log.e(getClass().getCanonicalName(), ex.getMessage());getMessage 
     } 

     if (canBack) { 
      mainActivity.drawerDisable(); 
     } else { 
      mainActivity.drawerEnable(); 
     } 
     return canBack; 
    } 

Bằng cách này disableDrawer & enableDrawer chức năng xử lý Biểu tượng của bạn và phương pháp OnBackPressed xử lý BackStack của bạn ngay trong hoạt động khi bạn nhấn hiển thị biểu tượng trở lại nếu cần. onBackPressed của bạn phải giống như sau:

int backStackCount = getSupportFragmentManager().getBackStackEntryCount(); 

      if (backStackCount == 0) { 
       //nothing exist in backStack OS handle it 
       super.onBackPressed(); 
      } else { 

       getSupportFragmentManager().popBackStack(); 
} 

Xem toàn bộ triển khai here.

+0

Cảm ơn câu trả lời của bạn. Bạn có biết tại sao onBackStackChanged được gọi nhiều lần khi một mảnh được lấy ra khỏi ngăn xếp? – Zach

+0

Tôi nghĩ rằng đó là do ** BackStack ** push/pop Nhưng tôi không chắc chắn. – Amir

7

này giả định bạn đang sử dụng một AppCompatActivity

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);   
     setContentView(R.layout.activity_main); 

     toolbar = (Toolbar) findViewById(R.id.tool_bar); // Attaching the layout to the toolbar object 
     setSupportActionBar(toolbar); 

     // enabling action bar app icon and behaving it as toggle button 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setHomeButtonEnabled(true); 
    } 

Sau đó, trong onOptionsItemSelected bạn có thể ghi đè lên các nút home như sau:

@Override 
    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_settings) { 
      return true; 
     } 
     else if(id == android.R.id.home){ 
      Intent i= new Intent(this, MainActivity.class); 
      i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(i); 
      finish(); 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
10

Chỉ cần thêm hai dòng mới của mã. Một cái gì đó như thế này

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); 
toolbar.setBackgroundColor(getResources().getColor(R.color.white)); 
toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.back_arrow)); 

setSupportActionBar(toolbar); 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     onBackPressed(); 
    } 
}); 
0

Phương pháp sử dụng trong lớp Hoạt động của bạn

private void setupToolbar(){ 
    Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     ActionBar actionBar=getSupportActionBar(); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
     actionBar.setDisplayShowHomeEnabled(true); 
     toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
    @Override 
      public void onClick(View v) { 
      finish(); 
      } 
       }); 
       } 
+0

Trong khi câu trả lời có thể chỉ là mã, tốt hơn là giải thích một chút về những gì bạn đã làm, điều này cũng làm tăng thêm giá trị cho câu trả lời của bạn trong tương lai – DaFois

0

Đó là tác phẩm trên lưng ép chức năng để toolbar

private setUpToolBar() { 

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 

setSupportActionBar(toolbar); 

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

getSupportActionBar().setDisplayShowHomeEnabled(true); 

toolbar.setNavigationOnClickListener(new View.OnClickListener() { 

@Override 

public void onClick(View v) { 

onBackPressed(); 

} 

}); 

} 
+0

Vui lòng chỉnh sửa mã của bạn đúng cách và thêm một số giải thích. – Billa

Các vấn đề liên quan