有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java onBackPressed()完成我的活动

在我的项目中,我只有一个ActivityView。 我认为它有两个View来切换View。第一个View是我的家,有一个Button名为“play”。单击播放Button时,将转到第二个View。第二个是我的游戏。 现在我的问题是,当我想在第二个View中使用onBackPressed()方法时,它会关闭Activity。和onBackPressed()方法在两个View中执行相同的操作。 如何处理返回到第一个View的第二个View中的onBackPressed()方法。 如何在onBackPressed()中切换View? 我刚接触安卓,现在我真的很困惑。 有什么建议吗?或者搜索任何关键字来解决我的问题

这是我的密码:

 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) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    不要每次都打电话给super.onBackPressed()

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

    只有在没有最后一个视图可用时才调用。或者你想在哪里关闭应用程序。代码将在您进行第一个活动时完成您的活动。如果你正在进行第二项活动,请切换到第一项活动。 按照你的代码替换我的方法

  3. # 3 楼答案

    在第二个类Cocos2dxActivity中,放置以下代码

    @Override
        public void onBackPressed() {
            this.finish();
          }
    
  4. # 4 楼答案

    如果只有一个活动有两个View,那么可以使用Fragments。 使用片段,活动。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();

    注意:您可以在HomeFragment类(进入button clickListener)或活动(使用回调系统)中调用此代码。例如:

    在你的家庭片段中-->; 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文件,为活动声明一个布局xml文件

    java和相关xml文件列表:

    MainActivity.java activity_main.xml

    YourHomeFragment.java fragment_your_home.xml<;-在这里插入您的第一个视图

    YourPlayFragment.java fragment_your_play.xml<;-播放视图

  5. # 5 楼答案

    当按下后退按钮时,必须使用覆盖方法 如果你想继续参加当前的活动,可以这样做

    @Override
        public void onBackPressed() {
            return;
        }
    

    如果你想用双击退出,用一键停留,你可以这样使用

    首先定义一个变量进行双击

    boolean doubleBackToExit = false;
    

    以及Override backbutton方法

    @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);
        }
    
  6. # 6 楼答案

    那就这么做

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