IT

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

lottoking 2020. 7. 12. 09:07
반응형

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>

http://developer.android.com/design/patterns/navigation.html#up-vs-back


활동에서 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뒤로 버튼을 표시하려는 활동으로 설정하는 것입니다. 이것도 역시해야합니다AndroidManfiest.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 당신에 AndroidManfiest.xml이 앱을 충돌합니다.

당신이 "무언가"를 잊었다는 것을 상기에서 당신이 원하는 것입니다. 그러나 당신의 활동에 존재하는 것이 있는지 확인할 수 있습니다.getParentActivityIntent() . null을 반환하면 부모를 지정하지 않은 것입니다.

경우이 onBackPressed()user-가 기기의 뒤로 버튼을 누르는 것과 기본적으로 동일한 방법을 실행할 수 있습니다 . 앱에 충돌이 발생하지 않는 좋은 구현은

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

가보고있는 애니메이션 user-사이에 차이가 있습니다 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);
}

일이야 :]


Android 주석 :

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

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

에서 onCreated새로운 API에 대한 방법.


OnCreate 메서드에서 다음을 추가합니다.

if (getSupportActionBar() != null)
    {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

그런 다음 다음 방법을 추가하십시오.

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

툴바를 사용하는 경우 동일한 문제가 발생했습니다. 이 두 단계를 따라 해결했습니다.

  1. AndroidManifest.xml에서
<activity android:name=".activity.SecondActivity" android:parentActivityName=".activity.MainActivity"/>
  1. SecondActivity에서 다음을 추가하십시오 ...
Toolbar toolbar = findViewById(R.id.second_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

다음 단계는 뒤로 버튼에 충분합니다.

1 단계 : 이 코드는 Manifest.xml에 있어야합니다.

<activity android:name=".activity.ChildActivity"
        android:parentActivityName=".activity.ParentActivity"
        android:screenOrientation="portrait">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".activity.ParentActivity" /></activity>

2 단계 : 주지 않을 것입니다.

finish();

자녀 활동을 시작하는 동안 부모 활동에서.

3 단계 : 자녀 활동에서 부모 활동으로 돌아 가야하는 경우이 코드를 자녀 활동에 제공됩니다.

startActivity(new Intent(ParentActivity.this, ChildActivity.class));

참고 URL : https://stackoverflow.com/questions/10108774/how-to-implement-the-android-actionbar-back-button

반응형