2014-10-15 4 views
12

나는 searchview을 포함하는 액션 바를 가지고 있습니다. 사용자가 검색 버튼을 클릭하고 검색보기를 축소하면 작업 표시 줄의 왼쪽에 뒤로 버튼이 표시됩니다.액션 바에 대한 클릭 버튼을 감지합니다. - (OnOptionsItemSelected는 액션 바 뒤로 버튼을 클릭 할 때 호출하지 않습니다.)

enter image description here

우리가 어떻게이 다시 버튼을 때 사용자가 클릭을 감지 할 수 ?

편집은

내는하지만 너무 호출되지 OnOptionsItemSelected 체크 답변에 따라. 이것은 내 OnOptionsItemSelected의 코드입니다 :

@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

답변

11

의 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

이 방법이 효과적이었습니다. 감사!! –

+1

더 이상 사용되지 않음 – iBEK

+0

시도해보기 MenuItem.setOnActionExpandListener (새 MenuItem.OnActionExpandListener() { @ Override public boolean onMenuItemActionExpand (MenuItem item) { return true; } @ 재정의 공개 부울 onMenuItemActionCollapse (MenuItem item) { return true; } }); https://developer.android.com/reference/android/view/MenuItem.OnActionExpandListener.html –

2

아래의 방법을 무시하십시오.

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

      } 
      return true; 
    } 
+3

I 그것을 무시했지만 뒤로 버튼을 클릭하면 실행되지 않습니다. –

+0

아래 라인을 추가하십시오. \t \t \t actionBar.setHomeButtonEnabled (true); –

+0

또한 actionBar.setDisplayHomeAsUpEnabled 추가 (true); –

4

당신은 당신이 원하는 활동에 대한 메타 데이터를 귀하의 manifest.xml을 추가해야합니다 그것을

처럼

<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> 

및 코드는

@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

첨부 된 이미지를 참조하십시오. 검색보기가 표시 될 때 뒤로 버튼 누르기를 감지하고 싶습니다. 첨부 된 코드는 검색 활동이 열려있을 때가 아니라 새로운 활동이 열릴 때 작동한다고 생각합니다. –

0

예에서 다음과 같이해야한다 이것을 시도하십시오 : onOptionsItemSelected를 사용하여 검색 변경을 검색하는 대신 OnQueryTextListener를 사용하십시오. 그러면 onQueryTextChanged가 뒤로 버튼 (및 쿼리 텍스트가 변경되는 다른 시간)과 함께 호출됩니다.

메뉴를 설정할 때 searchView를 수신기에 할당하십시오. onQueryTextChange는 검색 기준이 변경 될 때마다 (검색 버튼을 제외한 다른 키보드 누름에서) 호출되며 뒤로 버튼을 누르면 빈 문자열로 호출됩니다. 키보드에서 검색 버튼을 누르면 onQueryTextSubmit이 호출됩니다.

@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; 
} 
관련 문제