작업 표시 줄 뒤로 버튼이 작동하지 않음
이 Android 문서 의 도움으로 작업 모음 뒤로 버튼을 시도하고 있습니다. 아래 이미지와 같은 작업 모음 뒤로 버튼이 표시됩니다.
산출:
하지만 내 문제는 갤러리 이미지를 본 후 action bar back button
.
그럼 it is not working
.하지만 go back to previous page
.
다음은 코딩입니다.
GalleryActivity.java :
import android.app.ActionBar;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.NavUtils;
import android.view.MenuItem;
import com.fth.android.R;
public class GalleryActivity extends FragmentActivity {
private int position;
private static String id;
private static String name;
private DemoCollectionPagerAdapter mDemoCollectionPagerAdapter;
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
position = getIntent().getExtras().getInt("position");
id = getIntent().getExtras().getString("id");
name = getIntent().getExtras().getString("name");
mDemoCollectionPagerAdapter = new DemoCollectionPagerAdapter(getSupportFragmentManager());
// Set up action bar.
final ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
// getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME|ActionBar.DISPLAY_USE_LOGO|ActionBar.DISPLAY_HOME_AS_UP);
// Set up the ViewPager, attaching the adapter.
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mDemoCollectionPagerAdapter);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent upIntent = new Intent(this, HomeActivity.class);
upIntent.putExtra("position", position);
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
TaskStackBuilder.from(this)
.addNextIntent(upIntent)
.startActivities();
finish();
} else {
NavUtils.navigateUpTo(this, upIntent);
}
return true;
}
return super.onOptionsItemSelected(item);
}
}
GalleryDetailFragment.java :
import com.sit.fth.model.GalleryDetail;
import com.sit.fth.util.APIServiceHandler;
import com.sit.fth.util.AppConstants;
import com.sit.fth.util.AppPromoPager;
public class GalleryDetailFragment extends BaseFragment implements
PromoPagerListener {
private TextView countView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
this.setHasOptionsMenu(true);
id = getArguments().getString("id");
name = getArguments().getString("name");
View view = inflater.inflate(R.layout.app_pager, null);
return view;
}
}
이 문제를 해결하는 방법을 안다면 누구든지 나를 도울 수 있습니다. 감사합니다.
아래 코딩을 추가하여 이러한 문제를 해결했습니다 GalleryActivity
.
ActionBar actionBar;
actionBar=getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
에서 MainActivity :
이전에는
공용 클래스 HomeActivity는 BaseActivity를 확장합니다.
그런 다음 나는
공용 클래스 HomeActivity는 FragmentActivity를 확장합니다.
에서 GalleryFragment :
나는 Intent
그것을 GalleryActivity
.
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Gallery gallery = (Gallery) arg0.getAdapter().getItem(arg2);
Intent intent = new Intent(getActivity(), GalleryActivity.class);
intent.putExtra("position", position);
intent.putExtra("id", gallery.getGalId());
intent.putExtra("name", gallery.getAlbumTitle());
startActivity(intent);
// mCallback.OnGalItemSelected(gallery.getGalId(),gallery.getAlbumTitle());
}
읽어 보시기 바랍니다 이
다음과 같은 것이 있어야합니다.
<activity
android:name="com.sit.fth.activity.HomeActivity"
android:screenOrientation="portrait">
</activity>
<activity
android:name="com.sit.fth.activity.GalleryActivity"
android:screenOrientation="portrait"
android:parentActivityName="com.sit.fth.activity.HomeActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.sit.fth.activity.HomeActivity"/>
</activity>
그런 다음 NavUtils.navigateUpFromSameTask (this)를 호출하면 상위 활동 (HomeActivity)으로 이동합니다.
다음 과 같이 onCreate 메서드에서 setDisplayHomeAsUpEnabled (true) 메서드 를 호출 하고 onSupportNavigateUp ()을 재정의하고 onBackPressed () 를 호출 해야 합니다. 그게 다야. 완료 :)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_help);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
같은 시도
우선 프래그먼트 를 위해 addToBackStack()
이전 commit()
에 사용해야 할 것
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
if(getSupportFragmentManager().getBackStackEntryCount()>0)
getSupportFragmentManager().popBackStack();
return true;
}
return super.onOptionsItemSelected(item);
}
manifest.xml의 활동에 다음 행을 추가하기 만하면됩니다. 상위 활동은 돌아 가려는 활동입니다.
android:parentActivityName=".activities.MainActivity"
여기에 제공된 답변 중 어느 것도 나를 위해 일하지 않았습니다. 메서드 switch
내부 에 넣어야했습니다 onMenuItemSelected
. 이것이 Android 문서에 명시된 것이 아니라는 것을 알고 있지만 여전히 작동하므로 동일한 문제가 발생하는 사람들을 위해 여기에 남겨 두겠다고 생각했습니다. 내 문제는 Activity
대신에 관련 Fragment
되었지만 거의 동일해야합니다.
class FooActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return false;
}
}
에 사용 SupportNavigateUp()
방법 및 호출 onBackPressed
이 방법이다.
나에게는 mDrawerToggle.setToolbarNavigationClickListener(...)
역 동작을 유발하는 청취자 로 설정 해야했습니다. 그렇지 않으면 아무것도하지 않습니다. 의 소스 코드는 ActionBarDrawerToggle
다음과 같습니다.
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mDrawerIndicatorEnabled) {
toggle();
} else if (mToolbarNavigationClickListener != null) {
mToolbarNavigationClickListener.onClick(v);
}
}
});
따라서 기본 동작은 실제로 리스너를 호출하는 것이며 자체적으로 마법을 수행하지 않습니다.
onCreate
{
...
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
resetActionBar();
...
}
public void resetActionBar()
{
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
@Override
public void onBackPressed() {
FragmentManager fm = getSupportFragmentManager();
int count = fm.getBackStackEntryCount();
if(count == 0) {
// Do you want to close app?
showDialog();
}else{
super.onBackPressed();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
Log.i("coming", "comming");
//noinspection SimplifiableIfStatement
if(id==android.R.id.home){
if (getSupportFragmentManager().getBackStackEntryCount() > 0)
onBackPressed();
else
drawerLayout.openDrawer(navigationView);
return true;
}
return super.onOptionsItemSelected(item);
}
Here is one more thing to check for in case the other answers here (or here or here or here) don't work.
I had copied some code from another activity that disabled the menu. Deleting this method (and applying the solutions given in the others answers) allowed the up button to work.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// hide the menu
return false;
}
In my case I had overridden the onCreateOptionsMenu method and I forgot to call super at the end.
if the home button is shown. you should add an action to the home button through onOptionItemSelected fun (arrow in your case) by default there's no action. so it's totally normal that it's not working. Please add this fun to your activity :
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when {
item.itemId == android.R.id.home -> {
finish()
true
}
else -> super.onOptionsItemSelected(item)
}
}
Best and easy answer is add the parent activity name in Manifest file, so Actionbar back button will work.
매니페스트 파일의 해당 활동 태그 아래에서 android:parentActivityName=".MyCustomParentActivity"
참고 URL : https://stackoverflow.com/questions/24032956/action-bar-back-button-not-working
'IT박스' 카테고리의 다른 글
PHP 치명적인 오류 : 빈 속성에 액세스 할 수 없습니다. (0) | 2020.11.29 |
---|---|
현재 다른 Gradle 인스턴스에서 사용 중입니다. (0) | 2020.11.29 |
Swift에서 숫자 만 취하도록 UITextField를 제한하는 방법은 무엇입니까? (0) | 2020.11.29 |
Django 양식 ChoiceField에서 선택 레이블을 얻는 방법은 무엇입니까? (0) | 2020.11.29 |
반짝이는 4 개의 작은 텍스트 입력 상자 나란히 (0) | 2020.11.29 |