2016-09-14 4 views
0

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

вот мой код:

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; 
} 
} 
+0

, что вы хотите на самом деле? –

+0

@AnshulTyagi Я хочу, когда я использовал onbackpresed, второй вид переходит к первому представлению – nsr

ответ

0

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

+0

как? Не могли бы вы объяснить более – nsr

+0

@nsr проверить отредактированный ответ –

+0

Я знаю это, но я не знаю, как его использовать в моем коде – nsr

0

Просто не звоните super.onBackPressed() каждый раз.

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

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

+0

что такое islastview() и swtichtopreviuosview()? – nsr

+0

Просто дал вам логику переключения взглядов. Вы сами можете переключать виды. Спасибо. – Mann

+0

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

0

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

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

вы должны использовать метод Override когда кнопка назад нажата , если вы хотите, чтобы остаться на использование ТЕКУЩ деятельности как этот

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

Я не хочу этого – nsr

0

в вашем втором классе Cocos2dxActivity, поместите этот код.

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

Если у вас есть только один вид деятельности с двумя View вы можете использовать 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 (в buttonListener) или в своей деятельности (используя систему обратного вызова). Например:

В 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 для фрагментов и один для деятельности.

Список ява и относительной XML-файлов:

MainActivity.java activity_main.xml

YourHomeFragment.java fragment_your_home.xml < - вставьте здесь ваш первый Просмотр

YourPlayFragment.java fragment_your_play.xml < - играть вид

+0

у меня не было никакого макета – nsr

+0

mh ok. Вы можете попытаться использовать FrameLayout, объявленный в методе init(). 'getFragmentManager(). beginTransaction() .add (framelayout.getId(), новый YourHomeFragment()) .commit();' – hooloovoo

Смежные вопросы