Панель действий Кнопка "Назад" не работает

с помощью этих Android Docs. Я пытаюсь сделать панель действий. Кнопка "Назад". Я получаю кнопку "Назад в действие", как эти ниже изображения:

enter image description here

Вывод:

Но моя проблема. После просмотра изображений в галерее я нажимаю 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);
        }


      }

ГалереяDetailFragment.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;
    }

}

Кто-нибудь может мне помочь, если вы знаете, как их решить. Спасибо.

Ответ 1

Я решил эту проблему, добавив следующее кодирование в 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());
    } 

Ответ 2

Пожалуйста, прочитайте this

у вас должно быть что-то вроде этого:

    <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).

Ответ 3

Вам необходимо вызвать метод setDisplayHomeAsUpEnabled (true) в методе onCreate, переопределить 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;
}

Ответ 4

Попробуйте

Прежде всего вам нужно использовать addToBackStack() до commit() для фрагментов

@Override
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
         // Respond to the action bar Up/Home button
         case android.R.id.home:
             if(getSupportFragmentManager().getBackStackEntryCount()>0)
                getSupportFragmentManager().popBackStack();
             return true;
         }
         return super.onOptionsItemSelected(item);
     } 

Ответ 5

Вам просто нужно добавить следующую строку в действие в manifest.xml. Родительское действие - это действие, к которому вы хотите вернуться.

    android:parentActivityName=".activities.MainActivity"

Ответ 6

Ни один из ответов, приведенных здесь, не работал у меня. Мне пришлось поставить 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;
    }
}

Ответ 7

Используйте метод SupportNavigateUp() и вызовите метод onBackPressed в этом методе.

Ответ 8

Мне нужно было установить mDrawerToggle.setToolbarNavigationClickListener(...) слушателю, который запускает обратное действие. В противном случае он ничего не делает. Вот как выглядит исходный код ActionBarDrawerToggle:

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    if (mDrawerIndicatorEnabled) {
      toggle();
    } else if (mToolbarNavigationClickListener != null) {
      mToolbarNavigationClickListener.onClick(v);
    }
  }
});

Таким образом, поведение по умолчанию - это на самом деле вызов нашего слушателя, а не собственное волшебство.

Ответ 9

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

Ответ 10

Вот еще одна вещь, которую нужно проверить, если другие ответы здесь (или здесь или здесь или здесь) не работают.

Я скопировал код из другого действия, которое отключило меню. Удаление этого метода (и применение решений, указанных в ответах других) позволило кнопке "вверх" работать.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // hide the menu
    return false;
}

Ответ 11

В моем случае я переопределил метод onCreateOptionsMenu и в конце забыл вызвать super.

Ответ 12

если кнопка домой отображается. Вы должны добавить действие к домашней кнопке с помощью onOptionItemSelected fun (стрелка в вашем случае), по умолчанию никаких действий нет. так что это совершенно нормально, что это не работает. Пожалуйста, добавьте это удовольствие в свою деятельность:

 override fun onOptionsItemSelected(item: MenuItem): Boolean {
        return when {
            item.itemId == android.R.id.home -> {
                finish()
                true
            }
            else -> super.onOptionsItemSelected(item)
        }
    }

Ответ 13

Лучший и простой ответ - добавить имя родительского действия в файл манифеста, чтобы сработала кнопка "Назад" на панели действий.

Для этого под тегом Activity файла Manifest используйте android:parentActivityName=".MyCustomParentActivity"