onBackPressed() завершает мою активность

В моем проекте у меня только один Activity который имеет View, Я думаю, что у него есть два View которые переключают View, Первый View мой дом имеет один Button названный "игрой". когда вы нажимаете кнопку воспроизведения Button идет ко второму View, второй View это моя игра И теперь моя проблема в том, что когда я хочу использовать onBackPressed() метод во втором Viewзакрывает Activity, а также onBackPressed() метод сделать то же самое в обоих View, Как обращаться onBackPressed() метод во втором View что вернуться к первому View, Как переключить View в onBackPressed()? Я новичок с Android, и теперь я действительно запутался. любое предложение? или любое ключевое слово для поиска, чтобы решить мою проблему.

вот мой код:

 public class PTPlayer extends Cocos2dxActivity {

static Splash splash;
public static AppList appList;
static Noti_Queue noti_queue;

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);


    Log.v("----------", "onActivityResult: request: " + requestCode + " result: " + resultCode);

    if (requestCode == PTServicesBridge.RC_SIGN_IN) {
    }
}

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);


    if (splash == null) {
        splash = new Splash(this);
        splash.set_identity("1");
    }


    if (appList == null) {
        appList = new AppList(this);
        appList.set_identity("1");
    }


    if (noti_queue == null) {
        noti_queue = new Noti_Queue(this);
        noti_queue.set_identity("1");
    }


}

@Override
public void onNativeInit() {
    initBridges();
}

private void initBridges() {
    PTStoreBridge.initBridge(this);
    PTServicesBridge.initBridge(this, getString(R.string.app_id));

    if (PTJniHelper.isAdNetworkActive("kChartboost")) {
        PTAdChartboostBridge.initBridge(this);
    }

    if (PTJniHelper.isAdNetworkActive("kRevMob")) {
        PTAdRevMobBridge.initBridge(this);
    }

    if (PTJniHelper.isAdNetworkActive("kAdMob") || PTJniHelper.isAdNetworkActive("kFacebook")) {
        PTAdAdMobBridge.initBridge(this);
    }

    if (PTJniHelper.isAdNetworkActive("kAppLovin")) {
        PTAdAppLovinBridge.initBridge(this);
    }

    if (PTJniHelper.isAdNetworkActive("kLeadBolt")) {
        PTAdLeadBoltBridge.initBridge(this);
    }

    if (PTJniHelper.isAdNetworkActive("kVungle")) {
        PTAdVungleBridge.initBridge(this);
    }

    if (PTJniHelper.isAdNetworkActive("kPlayhaven")) {
        PTAdUpsightBridge.initBridge(this);
    }

    if (PTJniHelper.isAdNetworkActive("kMoPub")) {
        PTAdMoPubBridge.initBridge(this);
    }

    if (PTJniHelper.isAdNetworkActive("kFacebook")) {
        PTAdFacebookBridge.initBridge(this);
    }

    if (PTJniHelper.isAdNetworkActive("kHeyzap")) {
        PTAdHeyzapBridge.initBridge(this);
    }

}

@Override
public Cocos2dxGLSurfaceView onCreateView() {
    Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
    glSurfaceView.setEGLConfigChooser(8, 8, 8, 0, 0, 0);

    return glSurfaceView;
}

static {
    System.loadLibrary("player");
}

@Override
protected void onResume() {
    super.onResume();
    if (PTJniHelper.isAdNetworkActive("kChartboost")) {
        PTAdChartboostBridge.onResume(this);
    }
}

@Override
protected void onStart() {
    super.onStart();
    if (PTJniHelper.isAdNetworkActive("kChartboost")) {
        PTAdChartboostBridge.onStart(this);
    }
}

@Override
protected void onStop() {
    super.onStop();
    if (PTJniHelper.isAdNetworkActive("kChartboost")) {
        PTAdChartboostBridge.onStop(this);
    }
}

@Override
protected void onDestroy() {
    super.onDestroy();
}


@Override
public void onBackPressed() {
    splash.Display();
    splash = null;
    super.onBackPressed();
}
}

здесь я думаю, что на мой второй взгляд:

     public abstract class Cocos2dxActivity extends Activity implements  Cocos2dxHelperListener {
// ===========================================================
// Constants
// ===========================================================

private static final String TAG = Cocos2dxActivity.class.getSimpleName();

// ===========================================================
// Fields
// ===========================================================

private Cocos2dxGLSurfaceView mGLSurfaceView;
private Cocos2dxHandler mHandler;
private static Context sContext = null;

public static Context getContext() {
    return sContext;
}

// ===========================================================
// Constructors
// ===========================================================

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    sContext = this;
    this.mHandler = new Cocos2dxHandler(this);

    this.init();

    Cocos2dxHelper.init(this, this);


}

// ===========================================================
// Getter & Setter
// ===========================================================

// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================

@Override
protected void onResume() {
    super.onResume();

    Cocos2dxHelper.onResume();
    this.mGLSurfaceView.onResume();
}

@Override
protected void onPause() {
    super.onPause();

    Cocos2dxHelper.onPause();
    this.mGLSurfaceView.onPause();
}

@Override
public void showDialog(final String pTitle, final String pMessage) {
    Message msg = new Message();
    msg.what = Cocos2dxHandler.HANDLER_SHOW_DIALOG;
    msg.obj = new Cocos2dxHandler.DialogMessage(pTitle, pMessage);
    this.mHandler.sendMessage(msg);
}

@Override
public void showEditTextDialog(final String pTitle, final String pContent, final int pInputMode, final int pInputFlag, final int pReturnType, final int pMaxLength) { 
    Message msg = new Message();
    msg.what = Cocos2dxHandler.HANDLER_SHOW_EDITBOX_DIALOG;
    msg.obj = new Cocos2dxHandler.EditBoxMessage(pTitle, pContent, pInputMode, pInputFlag, pReturnType, pMaxLength);
    this.mHandler.sendMessage(msg);
}

@Override
public void runOnGLThread(final Runnable pRunnable) {
    this.mGLSurfaceView.queueEvent(pRunnable);
}

// ===========================================================
// Methods
// ===========================================================
public void init() {

    // FrameLayout
    ViewGroup.LayoutParams framelayout_params =
        new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
                                   ViewGroup.LayoutParams.FILL_PARENT);
    FrameLayout framelayout = new FrameLayout(this);
    framelayout.setLayoutParams(framelayout_params);

    // Cocos2dxEditText layout
    ViewGroup.LayoutParams edittext_layout_params =
        new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
                                   ViewGroup.LayoutParams.WRAP_CONTENT);




    this.mGLSurfaceView = this.onCreateView();



    // Switch to supported OpenGL (ARGB888) mode on emulator
    if (isAndroidEmulator())
       this.mGLSurfaceView.setEGLConfigChooser(8 , 8, 8, 8, 16, 0);

    this.mGLSurfaceView.setCocos2dxRenderer(new Cocos2dxRenderer());


            RelativeLayout relativeLayout = new           RelativeLayout(getApplicationContext());
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
    params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    relativeLayout.setLayoutParams(params);

    //AdView adad = new AdView(this);
    ClickBanner_CLickYab_Holder adad = new ClickBanner_CLickYab_Holder(this);
    RelativeLayout.LayoutParams adad_params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    adad_params.addRule(RelativeLayout.CENTER_HORIZONTAL);
    adad_params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    // adad.setToken(getString(R.string.adad_token));
    adad.setLayoutParams(adad_params);

    Button myButton = new Button(this);


    myButton.setBackgroundResource(R.drawable.more);
    RelativeLayout.LayoutParams adad_params1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,

            RelativeLayout.LayoutParams.WRAP_CONTENT);
    adad_params1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
    adad_params1.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    myButton.setLayoutParams(adad_params1);
    myButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            PTPlayer.appList.Display();
        }
    });

    Button myButton1 = new Button(this);


    myButton1.setBackgroundResource(R.drawable.more);
    RelativeLayout.LayoutParams adad_params2 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,

            RelativeLayout.LayoutParams.WRAP_CONTENT);
    adad_params2.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
    adad_params2.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    myButton1.setLayoutParams(adad_params2);
    myButton1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            PTPlayer.appList.Display();
        }
    });


    relativeLayout.addView(this.mGLSurfaceView);
    relativeLayout.addView(adad);
    relativeLayout.addView(myButton);
    relativeLayout.addView(myButton1);
    ClickBanner_CLickYab_Holder.setTestMode();
    setContentView(relativeLayout);




}

public Cocos2dxGLSurfaceView onCreateView() {
    return new Cocos2dxGLSurfaceView(this);
}

     private final static boolean isAndroidEmulator() {
  String model = Build.MODEL;
  Log.d(TAG, "model=" + model);
  String product = Build.PRODUCT;
  Log.d(TAG, "product=" + product);
  boolean isEmulator = false;
  if (product != null) {
     isEmulator = product.equals("sdk") || product.contains("_sdk") ||     product.contains("sdk_");
  }
  Log.d(TAG, "isEmulator=" + isEmulator);
  return isEmulator;
}
}

6 ответов

Вы должны использовать метод переопределения, когда нажата кнопка "Назад", если вы хотите остаться на текущей активности, используйте это

@Override
    public void onBackPressed() {
        return;
    }

если вы хотите использовать двойной щелчок для выхода и один щелчок, чтобы остаться, вы можете использовать как это

сначала определите переменную для двойного щелчка

boolean doubleBackToExit = false;

и метод переопределения кнопки

@Override
    public void onBackPressed() {
        if (doubleBackToExit) {
         //on double back button pressed
            return;
        }
        this.doubleBackToExit = true;
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                doubleBackToExit=false;
            }
        }, 2000);
    }

Переопределите onBackPressed() действия и предоставьте экран, куда вы хотите перейти. Проверка onBackpressed(), которая является текущим представлением, которое вы показываете, и в соответствии с переходом к первому представлению.

Тогда сделай это.

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent(MainActivityPhase2.this, GlobalSearch.class);
                startActivity(intent);
    finish();
}

Поместите этот код во второй класс Cocos2dxActivity.

@Override
    public void onBackPressed() {
        this.finish();
      }

Если у вас есть только одно занятие с двумя View ты можешь использовать Fragments, Используя Fragments, Activity.OnBackPressed() удалит последний фрагмент в стеке, и вы сможете решить свою проблему.

Итак, в упражнении вы должны поместить контейнер в файл макета xml:

<FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:clickable="true" android:layout_height="match_parent"/>

В файле активности Java:

getFragmentManager().beginTransaction() .add(R.id.container,new YourHomeFragment()) .commit();

Таким образом, чтобы добавить второй фрагмент, вы можете использовать этот код:

getFragmentManager().beginTransaction() .add(R.id.container,new YourPlayFragment()) .addToBackStack("YourPlayFragment") //string what you want .commit();

Обратите внимание: вы можете вызвать этот код или в классе YourHomeFragment (в кнопку clickListener) или в вашей деятельности (используя систему обратного вызова). Например:

В YourHomeFragment ->playButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getFragmentManager().beginTransaction() .add(R.id.container,new YourPlayFragment()) .addToBackStack("YourPlayFragment") //string what you want .commit(); } });

Таким образом, вы должны объявить два XML-файла макета для фрагментов и один для Activity.

Список java и относительных xml файлов:

MainActivity.javaactivity_main.xml

YourHomeFragment.javafragment_your_home.xml <- вставьте сюда свой первый вид

YourPlayFragment.javafragment_your_play.xml <- просмотр игры

Только не звони super.onBackPressed() каждый раз.

    @Override
    public void onBackPressed() {
       if (isFirstView()) {
          super.onBackPressed();
      } else {
          switchToFirstView();
      }

Звоните только тогда, когда последний просмотр недоступен. Или где вы хотите закрыть приложение. Код завершит вашу деятельность, когда вы будете на первой активности. И переключитесь на первое действие, если вы занимаетесь вторым действием. Просто замените мои методы согласно вашему коду.

Другие вопросы по тегам