홈 버튼에 대한 작업 표시 줄의 onClick 리스너


84

onClickListener액션 바의 홈 버튼에 대한 사용자 정의 를 구현하려면 어떻게 해야합니까?

이미 a를 수행 getSupportActionBar().setDisplayHomeAsUpEnabled(true);했으며 이제 홈 버튼을 클릭 한 경우 사용자를 특정 활동으로 리디렉션하고 싶습니다.

나는 시도했다 :

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            item.setOnMenuItemClickListener(new OnMenuItemClickListener() {
                public boolean onMenuItemClick(MenuItem item) {
                    Intent i = new Intent();
                    i.setClass(BestemmingActivity.this, StartActivity.class);
                    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
                    return true;
                }
            });
        default:
            return super.onOptionsItemSelected(item);
        }
    }

하지만 onMenuItemClick.

기본적 으로이 링크 에서와 같이 수행 되지만 여전히 리스너에 들어 가지 않습니다.

답변:


112

다른 사람이 솔루션이 필요한 경우

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

    if (id == android.R.id.home) {
        onBackPressed();  return true;
    }

    return super.onOptionsItemSelected(item);
}

이것은 해결책이되어야합니다. 좋은 답변
jemsnaban

3
나를 위해 일한return true;

1
을 넣어 return true;의 끝에서 if블록, 그것은 맞습니다
androidguy

2
이 방법은 화살표 아이콘이있는 홈 / 뒤로 버튼에 대해 작동하지 않습니다.
Trancer

111

actionBarSherlock을 사용합니다. 설정 한 후에는 supportActionBar.setHomeButtonEnabled(true);
onMenuItemSelected 메서드를 재정의 할 수 있습니다.

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    int itemId = item.getItemId();
    switch (itemId) {
    case android.R.id.home:
        toggle();

        // Toast.makeText(this, "home pressed", Toast.LENGTH_LONG).show();
        break;

    }

    return true;
}

이 일이 당신을 위해 일하기를 바랍니다 ~~~ 행운을 빕니다


4
날 작동하지 않습니다. onMenuItemSelected를 최종으로 재정의 할 수 없습니다.
Aritra Roy

안드로이드 주석과 함께 @OptionsItem (android.R.id.home)을 사용하십시오. public void yourMethod () {}
Italo Borssatto

23

시스템을 사용하면 액션 바 다음 코드가 잘 작동합니다.

getActionBar().setHomeButtonEnabled(true);

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    int itemId = item.getItemId();
    switch (itemId) {
    case android.R.id.home:
      //do your action here.
        break;

    }

    return true;
}

7

고정 : 사용할 필요가 없습니다. setOnMenuItemClickListener . 버튼을 누르기 만하면 인 텐트를 통해 활동을 생성하고 시작합니다.

여러분의 도움에 감사드립니다!


오른쪽, 작업 표시 줄은 메뉴 리스너를 처리하고 onOptionsItemSelected()자동으로 호출합니다 . 수동으로 설치할 필요가 없습니다 (실제로 문제가 발생할 수 있음).
Nikolay Elenkov 2012-06-18

5

무슨 일이 일어나고 있는지 절반으로 대답합니다. manifest.xml 시스템의 상위 활동 세트가 상위 활동으로 이동할 때 onOptionsItemSelected제어 homeAsUp버튼 이 아닌 경우 . 활동 태그에서 다음과 같이 사용하십시오.

<activity ... >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.activities.MainActivity" /> 
</activity>

3

ICS에서 실행중인 경우 명시 적으로 홈 작업을 활성화해야합니다. 에서 워드 프로세서 :

참고 : 아이콘을 사용하여 홈 활동으로 이동하는 경우 Android 4.0 (API 레벨 14)부터는 setHomeButtonEnabled (true)를 호출하여 아이콘을 작업 항목으로 명시 적으로 활성화해야합니다 (이전 버전에서는 아이콘은 기본적으로 작업 항목으로 활성화되었습니다.


3
나는 이미 a getSupportActionBar().setDisplayHomeAsUpEnabled(true);와 agetSupportActionBar().setHomeButtonEnabled(true);
noloman을


-4

Override onOptionsItemSelected를 삭제하고이 코드로 onCreateOptionsMenu를 다시 작성해야합니다.

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_action_bar_finish_order_stop, menu);
        menu.getItem(0).setOnMenuItemClickListener(new FinishOrderStopListener(this, getApplication(), selectedChild));
        return true;

    }

1
사람들이 코드만으로 답변에 대한 stackoverflow의 정책을 이해하고 (뒤로?) 읽을 수 있도록 몇 가지 설명을 추가하십시오.
N0un
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.