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
새로운 아피스를 위한 방법.
툴바를 사용하고 있다면 저도 같은 문제에 직면해 있었습니다.나는 이 두 단계를 따라가며 해결했다.
- AndroidManifest.xml에서
<activity android:name=".activity.SecondActivity" android:parentActivityName=".activity.MainActivity"/>
- [ 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
'source' 카테고리의 다른 글
Maven 경고 메시지 사용 안 함 - "선택한 전쟁 파일에는 무시될 WEB-INF/web.xml이 포함됩니다." (0) | 2022.09.03 |
---|---|
JSR 305의 상태는 어떻습니까? (0) | 2022.09.03 |
JVM 인수 없이 Java 9에서 "불법 반사 액세스" 경고를 숨기려면 어떻게 해야 합니까? (0) | 2022.09.03 |
Java에서 이중을 부동으로 변환 (0) | 2022.09.03 |
Linux에서 C에서 현재 시간을 밀리초 단위로 가져오려면 어떻게 해야 합니까? (0) | 2022.09.03 |