Android返回到GLSurfaceView活动的主要活动并返回main

时间:2014-04-04 22:34:08

标签: android android-intent

在主要活动中,我有一个按钮,当我按下后退按钮时,我会进入另一个活动我想回到那个主要活动?我应该做同样的事情,我做了其他活动,但使用意图回到主要活动或主要活动onPause,我应该使用另一种方法来取消暂停?

当我点击主要活动中的按钮

public class MainActivity extends Activity 
{



    GridView gridView;
    ArrayList<Item> gridArray = new ArrayList<Item>(grid_size);
    CustomGridViewAdapter customGridAdapter;
    private GLSurfaceView glView; // Use subclass of GLSurfaceView (NEW)



    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /* glView = new MyGLSurfaceView(this);
         setContentView(glView);*/      


        customGridAdapter = new CustomGridViewAdapter(this, R.layout.button_item, gridArray, str_arr,column_width,column_height);


        gridView.setAdapter(customGridAdapter);


        enableDisableView(gridView, false);

    }

    @Override
      public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.mainmenu, menu);
        return true;


} 



 @Override
          public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            // action with ID action_refresh was selected
            case R.id.action_refresh:
              /*Toast.makeText(this, "Refresh selected", Toast.LENGTH_SHORT)
                 .show();*/

                /*// Allocate a custom subclass of GLSurfaceView (NEW)
                glView = new MyGLSurfaceView(this);
                setContentView(glView);  // Set View (NEW)private GLSurfaceView glView;  */         

                 Intent intent = new Intent(this, MyGLActivity.class);
                 startActivity(intent);

          break;
            // action with ID action_settings was selected
            case R.id.action_settings:
              Toast.makeText(this, "Settings selected", Toast.LENGTH_SHORT)
                  .show();
              break;
            default:
              break;
            }

            return true;
          }

        protected void onResume() 
        {
            super.onResume();
            customGridAdapter.counter = 0;
        }

        protected void onPause() 
        {


            /*if (customGridAdapter.scheduleTaskExecutorSession.isShutdown()
                    && customGridAdapter.scheduleTaskExecutorSession1.isShutdown()) 
            {
                // do nothing
            }
            else 
            {

                customGridAdapter.scheduleTaskExecutorSession.shutdown();
                customGridAdapter.scheduleTaskExecutorSession1.shutdown();
            }*/

            super.onPause();
         }

其他活动后退按钮代码

    public class MyGLActivity extends Activity {
     private GLSurfaceView glView;  // Use subclass of GLSurfaceView (NEW)

     @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Allocate a custom subclass of GLSurfaceView (NEW)
        glView = new MyGLSurfaceView(this, null);
        setContentView(glView);  // Set View (NEW)
     }
       @Override
 public void onBackPressed()
 {
  super.onBackPressed();
  finish();     
}
 @Override
 protected void onPause() {

     //super.onPause();
    //glView.onPause();

 }

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

GLSurfaceView.java

public class MyGLSurfaceView extends GLSurfaceView {
   MyGLRenderer renderer;    // Custom GL Renderer

   // For touch event
   private final float TOUCH_SCALE_FACTOR = 180.0f / 320.0f;
   private float previousX;
   private float previousY;

   // Constructor - Allocate and set the renderer
   public MyGLSurfaceView(Context context, AttributeSet attrs) {
      super(context, attrs);
      renderer = new MyGLRenderer(context);
      this.setRenderer(renderer);
      // Request focus, otherwise key/button won't react
      this.requestFocus();  
      this.setFocusableInTouchMode(true);
   }

   // Handler for key event
   @Override
   public boolean onKeyUp(int keyCode, KeyEvent evt) {
      switch(keyCode) {
         case KeyEvent.KEYCODE_DPAD_LEFT:   // Decrease Y-rotational speed
            renderer.speedY -= 0.1f;
            break;
         case KeyEvent.KEYCODE_DPAD_RIGHT:  // Increase Y-rotational speed
            renderer.speedY += 0.1f;
            break;
         case KeyEvent.KEYCODE_DPAD_UP:     // Decrease X-rotational speed
            renderer.speedX -= 0.1f;
            break;
         case KeyEvent.KEYCODE_DPAD_DOWN:   // Increase X-rotational speed 
            renderer.speedX += 0.1f;
            break;
         case KeyEvent.KEYCODE_A:           // Zoom out (decrease z)
            renderer.z -= 0.2f;
            break;
         case KeyEvent.KEYCODE_Z:           // Zoom in (increase z)
            renderer.z += 0.2f;
            break;
      }
      return true;  // Event handled
   }

   // Handler for touch event
   @Override
   public boolean onTouchEvent(final MotionEvent evt) {
      float currentX = evt.getX();
      float currentY = evt.getY();
      float deltaX, deltaY;
      switch (evt.getAction()) {
         case MotionEvent.ACTION_MOVE:
            // Modify rotational angles according to movement
            deltaX = currentX - previousX;
            deltaY = currentY - previousY;
            renderer.angleX += deltaY * TOUCH_SCALE_FACTOR;
            renderer.angleY += deltaX * TOUCH_SCALE_FACTOR;
      }
      // Save current x, y
      previousX = currentX;
      previousY = currentY;
      return true;  // Event handled
   }

}

4 个答案:

答案 0 :(得分:0)

super.onBackPressed();应该是第一个ligne

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

答案 1 :(得分:0)

在Android中,活动是分层的&#39;在彼此之上。如果您没有在通话活动上拨打finish(),按后退按钮会将您带回来。

所以好消息是:你根本不需要做任何事情。 android的标准行为将带你回到Main活动(如果你没有杀死它)

答案 2 :(得分:0)

您可以在点击后退键时覆盖该功能并返回到您想要的任何活动:

 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  
    {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
            Intent intent = new Intent(this, MainActivity.class);
            startActivity(intent);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

答案 3 :(得分:0)

我认为你可能指的是android后台堆栈。当您启动另一个活动时,新活动将被推送到上一个活动的顶部。之前的活动仍在堆栈中,但已停止。如果按后退按钮,顶部的活动将被销毁,之前的活动将恢复。所以,答案是否定的,你不需要另外的方法或任何东西。

您可以在中找到有关它的更多信息 http://developer.android.com/guide/components/tasks-and-back-stack.html