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;
}
툴바를 사용하는 경우 동일한 문제가 발생했습니다. 이 두 단계를 따라 해결했습니다.
- AndroidManifest.xml에서
<activity android:name=".activity.SecondActivity" android:parentActivityName=".activity.MainActivity"/>
- 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
'IT' 카테고리의 다른 글
| 왜 우리는 추상 팩토리 디자인 패턴이 필요합니까? (0) | 2020.07.13 |
|---|---|
| C #에서 바이트 []에서 IntPtr을 얻는 방법 (0) | 2020.07.12 |
| PostgreSQL에없는 경우 열을 추가하는 방법은 무엇입니까? (0) | 2020.07.12 |
| SQL 키워드에 대문자를 사용할 이유가 있습니까? (0) | 2020.07.12 |
| Overflow-x : 숨김으로 인해 모바일 브라우저에서 컨텐츠가 넘치지 언어로 작성되었습니다. (0) | 2020.07.12 |