source

Android ActionBar back 버튼을 구현하는 방법

factcode 2022. 9. 3. 13:14
반응형

Android ActionBar back 버튼을 구현하는 방법

목록 보기를 가진 활동이 있습니다.사용자가 항목을 클릭하면 "viewer" 항목이 열립니다.

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

이것은 정상적으로 동작하지만, 액션바에서 앱 아이콘 옆에 있는 뒤로 화살표가 활성화되지 않습니다.내가 뭘 빼놓았나요?

셀빈은 이미 정답을 올렸습니다.여기 예쁜 코드로 된 솔루션이 있습니다.

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>

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

Activity(활동)에서 ActionBar Home(액티비티) 버튼이 활성화되어 있는지 확인합니다.

Android, API 5+:

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

ActionBarSherlock 및 App-Compat, API 7+:

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

Android, 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);
        }
    }
}

이렇게 하면 원하는 모든 활동을 지원할 수 있습니다.

Android, 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 back 버튼을 활성화하려면 Activity에 ActionBar가 필요합니다.사용 중인 테마에 따라 설정됩니다.활동 테마는 에서 설정할 수 있습니다.AndroidManfiest.xml를 사용하고 있는 경우,@android:style/Theme.NoTitleBar테마, 액션바가 없습니다.이 경우 로의 콜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이 반환되는 경우 부모를 지정하지 않은 것입니다.

이 경우, RSA를 기동할 수 있습니다.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().

어떤 길을 택하느냐에 따라 다르지만, 특히 모든 활동에 기본 클래스를 사용하는 경우 솔루션이 도움이 된다는 것을 알게 되었습니다.

서서 OnCreate 명령어:

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

다음으로 다음 방법을 추가합니다.

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

AndroidManifest 파일:

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

상세 추가액티비티:

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() 입니다.

다음 stackoverflow 답변에서 완전한 솔루션을 확인합니다.링크: 완전한 코드를 보려면 여기를 클릭하십시오.

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

이를 실현하기 위해서는 두 가지 단계가 있습니다.

1단계: AndroidManifest.xml로 이동하여 태그에 매개 변수 추가 - Android:parentActivityName=".home.Activity"

예:

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

순서 2: 액티비티 상세에서 이전 페이지/액티비티에 대한 액션을 추가합니다.

예:

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

다음 단계는 뒤로 버튼을 누르기에 충분합니다.

순서 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));
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

onCreated새로운 아피스를 위한 방법.

툴바를 사용하고 있다면 저도 같은 문제에 직면해 있었습니다.나는 이 두 단계를 따라가며 해결했다.

  1. AndroidManifest.xml에서
<activity android:name=".activity.SecondActivity" android:parentActivityName=".activity.MainActivity"/>
  1. [ Second Activity ]에서 다음 항목을 추가합니다.
Toolbar toolbar = findViewById(R.id.second_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

다른 옵션은 응용 프로그램 매니페스트 파일에서 세컨더리 액티비티의 parentActivityName을 MainActifity로 설정하는 것입니다.

<activity
        android:name=".ServiceViewActivity"
        android:parentActivityName=".MainActivity"/>

Jared의 답변을 바탕으로 몇 가지 액티비티에서 액션 바백버튼 동작을 활성화하고 구현해야 했으며 코드 중복을 줄이기 위해 이 도우미 클래스를 만들었습니다.

public final class ActionBarHelper {
    public static void enableBackButton(AppCompatActivity context) {
        if(context == null) return;

        ActionBar actionBar = context.getSupportActionBar();
        if (actionBar == null) return;

        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

액티비티에서의 사용:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...

    ActionBarHelper.enableBackButton(this);
}

내가 직접 시도했는데 한 가지 효과가 있었어


        when(item.itemId) {
            R.id.action_signup -> signup() //other menu item
            android.R.id.home -> viewRoot.findNavController().navigateUp() //back 
        }

        return super.onOptionsItemSelected(item)
    }

나는 제트팩 내비게이션을 사용하고 있기 때문에 NavController를 입수하기 위한 전화입니다.

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

반응형