onBackPressed()完成我的Activity

时间:2016-09-14 06:22:18

标签: java android onbackpressed

在我的项目中,我只有一个ActivityView。 我认为它有两个View来切换View。第一个View是我的家,其中一个Button名为" play" 。当您点击播放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 个答案:

答案 0 :(得分:3)

按下后退按钮时必须使用覆盖方法 如果你想继续使用像这样的活动

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

答案 1 :(得分:0)

覆盖活动的onBackPressed(),并将屏幕提供给您想去的地方。 onBackpressed()检查您正在显示的当前视图,并根据移动到第一个视图。

答案 2 :(得分:0)

不要每次都致电super.onBackPressed()

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

仅在没有可用的最后一个视图时调用。或者您要关闭应用程序的位置。当您进行第一项活动时,代码将完成您的活动。如果您正在进行第二项活动,请切换到第一项活动。 只需根据您的代码替换我的方法。

答案 3 :(得分:0)

然后这样做。

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

答案 4 :(得分:0)

在你的第二堂课Cocos2dxActivity中,放置这段代码。

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

答案 5 :(得分:0)

如果您只有一个活动有两个View,则可以使用Fragments。 使用片段,Activity.OnBackPressed()将删除堆栈中的最后一个片段,您可以解决您的问题。

因此,在活动中,您必须在容器:

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

在Activity 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)或调用Activity(使用回调系统)。例如:

在YourHomeFragment中 - &gt; 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文件,为活动声明一个。

java和相对xml文件列表:

MainActivity.java activity_main.xml

YourHomeFragment.java fragment_your_home.xml&lt; - 在此插入您的第一个视图

YourPlayFragment.java fragment_your_play.xml&lt; - 播放视图