2014-10-15 20 views
12

Tôi có một thanh hành động có chứa searchview. Khi người dùng nhấp vào nút tìm kiếm và thu gọn chế độ xem tìm kiếm, thanh tác vụ hiển thị nút quay lại ở bên trái.phát hiện một nút bấm trên thanh hành động trở lại - (OnOptionsItemSelected không gọi khi bấm vào nút thanh hành động trở lại)

enter image description here

Làm cách nào chúng tôi có thể phát hiện khi người dùng nhấp vào nút quay lại này?

Sửa

dựa trên câu trả lời tôi đã kiểm tra tôi OnOptionsItemSelected nhưng nó không phải là kêu gọi quá. Đây là mã của OnOptionsItemSelected tôi:

@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(); 

    if (item != null && id == android.R.id.home) { 
     if (mNavigationDrawerFragment.isDrawerOpen(Gravity.RIGHT)) { 
      mNavigationDrawerFragment.closeDrawer(Gravity.RIGHT); 
     } else { 
      mNavigationDrawerFragment.openDrawer(Gravity.RIGHT); 

     } 
     return true; 
    } 
    if (id == R.id.action_search) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

http://stackoverflow.com/questions/14437745/how-to-override-action-bar-back-button-in-android – codePG

Trả lời

11

Đặt này trên phương pháp onCreateOptionsMenu:

MenuItemCompat.setOnActionExpandListener(menu.findItem(R.id.action_search), new MenuItemCompat.OnActionExpandListener() { 
    @Override 
    public boolean onMenuItemActionExpand(MenuItem item) { 

     return true; 
    } 

    @Override 
    public boolean onMenuItemActionCollapse(MenuItem item) { 

     //DO SOMETHING WHEN THE SEARCHVIEW IS CLOSING 

     return true; 
    } 
}); 
+1

Điều này đã hiệu quả. Cảm ơn!! –

+1

Điều này hiện không được chấp nhận – iBEK

+0

thử này MenuItem.setOnActionExpandListener (new MenuItem.OnActionExpandListener() { @ Ghi đè boolean công khai trênMenuItemActionExpand (mục MenuItem) { trả về true; } @ Ghi đè boolean công khai trênMenuItemActionCollapse (MenuItem item) { trả về true; } }); https://developer.android.com/reference/android/view/MenuItem.OnActionExpandListener.html –

2

Chỉ cần ghi đè dưới đây phương pháp.

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
      switch (item.getItemId()) { 
      case android.R.id.home: 
      //do whatever you want to do here. 

      } 
      return true; 
    } 
+3

tôi đã ghi đè lên nhưng không kích hoạt khi tôi nhấp vào nút quay lại –

+0

Thêm dòng dưới đây \t \t \t actionBar.setHomeButtonEnabled (true); –

+0

Ngoài ra, Thêm actionBar.setDisplayHomeAsUpEnabled (true); –

4

Bạn nên thêm dữ liệu meta manifest.xml của bạn mà hoạt động bạn muốn nó

Giống như

<activity 
     android:name=".Example" 
     android:label="@string/Example" 
     android:theme="Theme.AppCompat.Light"> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value=".MainActivity" /> 
    </activity> 

và mã của bạn nên được như thế này trong ví dụ

@Override 
protected void onCreate(Bundle savedInstanceState) { 
....... 
     getActionBar().setDisplayHomeAsUpEnabled(true); 

...... 
} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     // Respond to the action bar's Up/Home button 
     case android.R.id.home: 
      NavUtils.navigateUpFromSameTask(this); 
      return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+1

vui lòng xem hình ảnh đính kèm. Tôi muốn phát hiện báo chí của nút quay lại khi chế độ xem tìm kiếm hiển thị.Tôi nghĩ mã bạn đã đính kèm, đang hoạt động khi hoạt động mới đang mở, không phải khi lượt xem tìm kiếm mở –

0

Hãy thử điều này: thay vì sử dụng onOptionsItemSelected để phát hiện thay đổi tìm kiếm, hãy sử dụng một OnQueryTextListener. Sau đó, onQueryTextChanged sẽ được gọi với nút quay lại (và bất kỳ lúc nào văn bản truy vấn thay đổi).

Khi bạn thiết lập menu, hãy chỉ định tìm kiếmXem người nghe. OnQueryTextChange sẽ được gọi bất cứ khi nào tiêu chí tìm kiếm thay đổi (trên bất kỳ nhấn bàn phím nào ngoại trừ nút tìm kiếm), và nó sẽ được gọi bằng một chuỗi trống khi nhấn nút quay lại. OnQueryTextSubmit sẽ được gọi khi nút tìm kiếm được nhấn trên bàn phím.

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.main, menu); 

    final SearchView searchView = (SearchView)menu.findItem(R.id.action_search).getActionView(); 
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String s) { 
      Log.i(TAG,"onQueryTextSubmit: " + s); 
      searchView.clearFocus(); 
      return true; 
     } 

     @Override 
     public boolean onQueryTextChange(String s) { 
      Log.i(TAG,"onQueryTextChange: " + s); 
      FragmentManager fragmentManager = getSupportFragmentManager(); 
      Fragment fragment = fragmentManager.findFragmentByTag(currentFragmentTag); 
      if (fragment.getClass().getName().startsWith("com.mydomain.myapp.mainactivity.MyFragment")) { 
       if (s.isEmpty()) { 
        ((SingleICPListFragment)fragment).clearSearchCriteria(); 
       } else { 
        ((SingleICPListFragment) fragment).applySearchCriteria(s); 
       } 
      } 
      return true; 
     } 
    }); 

    SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

    return true; 
} 
Các vấn đề liên quan