[java] Android ActionBar 뒤로 버튼을 구현하는 방법은 무엇입니까?

목록보기가있는 활동이 있습니다. 사용자가 항목을 클릭하면 “뷰어”항목이 열립니다.

List1.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {

        Intent nextScreen = new Intent(context,ServicesViewActivity.class);
        String[] Service = (String[])List1.getItemAtPosition(arg2);

        //Sending data to another Activity
        nextScreen.putExtra("data", datainfo);
        startActivityForResult(nextScreen,0);
        overridePendingTransition(R.anim.right_enter, R.anim.left_exit);
    }
});

이것은 잘 작동하지만 작업 표시 줄에서 앱 아이콘 옆의 뒤로 화살표가 활성화되지 않습니다. 뭔가 빠졌습니까?



답변

Selvin은 이미 정답을 게시했습니다. 다음은 예쁜 코드의 솔루션입니다.

public class ServicesViewActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // etc...
        getActionBar().setDisplayHomeAsUpEnabled(true);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }
}

이 기능을 사용 NavUtils.navigateUpFromSameTask(this)하려면 AndroidManifest.xml 파일에서 상위 활동을 정의해야합니다.

<activity android:name="com.example.ServicesViewActivity" >
    <meta-data
     android:name="android.support.PARENT_ACTIVITY"
     android:value="com.example.ParentActivity" />
</activity>

자세한 내용은 여기 를 참조 하십시오 .


답변

활동에서 ActionBar 홈 단추가 사용 가능한지 확인하십시오.

안드로이드, API 5+ :

@Override
public void onBackPressed() {
     ...
     super.onBackPressed();
}

ActionBarSherlock 및 App-Compat, API 7+ :

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    ...
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

안드로이드, API 11+ :

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    ...
    getActionBar().setDisplayHomeAsUpEnabled(true);
}

MainActivity확장되는 예 ActionBarActivity:

public class MainActivity extends ActionBarActivity {
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Back button
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home: 
            // API 5+ solution
            onBackPressed();
            return true;

        default:
            return super.onOptionsItemSelected(item);
        }
    }
}

이런 식으로 원하는 모든 활동에 백 프레스를 적용 할 수 있습니다.

안드로이드, API 16+ :

http://developer.android.com/training/implementing-navigation/ancestral.html

AndroidManifest.xml:

<application ... >
    ...
    <!-- The main/home activity (it has no parent activity) -->
    <activity
        android:name="com.example.myfirstapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        android:name="com.example.myfirstapp.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <!-- The meta-data element is needed for versions lower than 4.1 -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>

MainActivity확장되는 예 ActionBarActivity:

public class MainActivity extends ActionBarActivity {
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Back button
        getSupportActionBar().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);
    }
}


답변

ActionBar 뒤로 버튼을 활성화하려면 분명히 활동에 ActionBar가 필요합니다. 이것은 사용중인 테마로 설정됩니다. 에서 활동 테마를 설정할 수 있습니다 AndroidManfiest.xml. 예를 들어 @android:style/Theme.NoTitleBar테마를 사용 하는 경우 ActionBar가 없습니다. 이 경우에 대한 호출 getActionBar()은 null을 반환합니다. 따라서 ActionBar가 먼저 있는지 확인하십시오.

다음 단계는 android:parentActivityName뒤로 버튼을 누르면 탐색하려는 활동 으로 설정하는 것입니다. 이것도 역시해야합니다 AndroidManifest.xml.

이제 onCreate“자식”활동 방법 에서 뒤로 단추를 사용할 수 있습니다 .

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

이제 뒤로 버튼의 논리를 구현해야합니다. 단순히 onOptionsItemSelected“자식”활동 의 메소드 를 대체하고 뒤로 단추의 ID 인를 확인하십시오 android.R.id.home.

이제 방법을 발사 할 수 있습니다 NavUtils.navigateUpFromSameTask(this); 하지만 당신이를 지정 해달라고하면 android:parentActivityName당신에 AndroidManifest.xml이 앱을 충돌합니다.

때로는 “무언가”를 잊었 음을 상기시키기 때문에 이것이 원하는 것입니다. 따라서이를 방지하려면 getParentActivityIntent()메소드를 사용하여 활동에 부모가 있는지 확인할 수 있습니다 . 이것이 null을 반환하면 부모를 지정하지 않은 것입니다.

이 경우 onBackPressed()사용자가 기기의 뒤로 버튼을 누르는 것과 기본적으로 동일한 방법을 실행할 수 있습니다 . 앱을 중단시키지 않는 좋은 구현은 다음과 같습니다.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            if (getParentActivityIntent() == null) {
                Log.i(TAG, "You have forgotten to specify the parentActivityName in the AndroidManifest!");
                onBackPressed();
            } else {
                NavUtils.navigateUpFromSameTask(this);
            }
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

사용자에게 표시되는 애니메이션은 NavUtils.navigateUpFromSameTask(this);및에서 서로 다릅니다 onBackPressed().

어느 길을 택 하느냐는 당신에게 달려 있지만, 특히 모든 활동에 기본 수업을 사용하는 경우 해결책이 도움이됩니다.


답변

AndroidManifest 파일 :

    <activity android:name=".activity.DetailsActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="br.com.halyson.materialdesign.activity.HomeActivity" />
    </activity>

DetailsActivity에 추가하십시오.

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

그것은 일이다 :]


답변

안드로이드 주석 :

@OptionsItem(android.R.id.home)
void homeSelected() {
    onBackPressed();
}

출처 : https://github.com/excilys/androidannotations


답변

onSupportNavigateUp()가장 간단하고 최선의 방법 이라고 생각합니다

이 링크의 코드를 확인 하십시오. 전체 코드를 보려면 여기를 클릭하십시오.


답변

https://stackoverflow.com/a/46903870/4489222

이를 위해 두 단계 만 거치면됩니다.

1 단계 : AndroidManifest.xml로 이동하여 태그-android : parentActivityName = “. home.HomeActivity”에 매개 변수 추가

예 :

 <activity
    android:name=".home.ActivityDetail"
    android:parentActivityName=".home.HomeActivity"
    android:screenOrientation="portrait" />

2 단계 : ActivityDetail에서 이전 페이지 / 활동에 대한 조치 추가

예 :

@Override
public boolean onOptionsItemSelected(MenuItem item) {
   switch (item.getItemId()) {
      case android.R.id.home:
          onBackPressed();
          return true;
   }
   return super.onOptionsItemSelected(item);}
}