2014-09-19 3 views
0

임 구글 등의 인/아웃 버튼을 로그인 Play 게임 서비스를 구현하기 위해 노력하고 인/아웃 버튼을 로그인은 여기 제안 : https://developers.google.com/games/services/training/signin구글 플레이 게임 서비스는

그러나 때마다

findViewById(R.id.sign_in_button).setVisibility(View.GONE); 

또는

findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE); 

이 호출됩니다. 응용 프로그램이 다운됩니다.

문제는 - 기본 레이아웃에이 버튼을 올바르게 추가하고 사용하는 방법을 잘 모르겠습니다.

그래서 나는 그것을 얻지 못합니다 ... 로그인을/아웃 버튼에 올바르게 추가하지 않았거나 레이아웃에 문제가 있습니까? 실제로 어떻게이 버튼을 메인 레이아웃에 추가합니까? 나는이 버튼들, 코드의 조각들만을 완벽하게 구현하는 인터넷에서 어떤 소스도 찾지 못했습니다.

보기와 관련이있을 수 있습니까? 나는 그것을 얻지 못한다 - 만약 View.OnClickListener를 구현한다면,이 버튼들은 그들이 할당 된 뷰를 어떻게 알 수 있는가 ... 나는 광고를위한 또 다른 뷰를 만들었지 만 그것의 특별한 뷰를 만들었다. 임은 단지 손실 :(여기

내 주요 배치된다

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<!-- sign-in button --> 
<com.google.android.gms.common.SignInButton 
android:id="@+id/sign_in_button" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" /> 

<!-- sign-out button --> 
<Button 
android:id="@+id/sign_out_button" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="Sign Out" 
android:visibility="gone" /> 

</LinearLayout> 

그리고 내 주요 활동에서 무엇을 먹으 렴은 : 당신이 있기 때문에

public class AndroidLauncher extends AndroidApplication implements AdInterface, GameHelperListener, ActionResolver, View.OnClickListener { 

int launched = 0; 

Intent intent; 

private final String AD_UNIT_ID = "------"; 

private final int SHOW_ADS = 1; 
private final int HIDE_ADS = 0; 

protected AdView adView; 

private GameHelper gameHelper; 

ConnectivityManager cm; 

NetworkInfo ni; 

protected Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     switch(msg.what) { 
     case SHOW_ADS: 
      adView.setVisibility(View.VISIBLE); 
      //AdRequest adRequest = new AdRequest.Builder().build(); 
      //adView.loadAd(adRequest); 
      break; 
     case HIDE_ADS: 
      adView.setVisibility(View.GONE); 
      break; 
     } 
    } 
}; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (launched == 0){ 


    setContentView(R.layout.main); 

    findViewById(R.id.sign_in_button).setOnClickListener(this); 
    findViewById(R.id.sign_out_button).setOnClickListener(this); 

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

    intent = new Intent(this, VideoActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 

    AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration(); 

    initialize(new Game(this, this), cfg); 

    if (gameHelper == null) { 

     gameHelper = new GameHelper(this, GameHelper.CLIENT_GAMES); 
     gameHelper.enableDebugLog(true); 

     } 
    gameHelper.setup(this); 


    adView = new AdView(this); 
    adView.setAdSize(AdSize.BANNER); 
    adView.setAdUnitId(AD_UNIT_ID); 
    adView.setId(12345); // this is an arbitrary id, allows for relative positioning in createGameView() 

    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, 
      FrameLayout.LayoutParams.WRAP_CONTENT, 
      Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM); 

    adView.setLayoutParams(params); 
    adView.setBackgroundColor(Color.BLACK); 


    addContentView(adView, params); 


    startAdvertising(adView); 

    launched = 1; 
    } 


//*@Override 
//*public void onStart(){ 
//* super.onStart(); 
//* gameHelper.onStart(this); 
//*} 

@Override 
public void onStop(){ 
    super.onStop(); 
    gameHelper.onStop(); 
} 

@Override 
public void onActivityResult(int request, int response, Intent data) { 
    super.onActivityResult(request, response, data); 
    gameHelper.onActivityResult(request, response, data); 
} 

private void startAdvertising(AdView adView) { 
    AdRequest adRequest = new AdRequest.Builder().build(); 
    adView.loadAd(adRequest); 
    } 

@Override 
public void showAds(boolean show) { 
    // TODO Auto-generated method stub 
    handler.sendEmptyMessage(show ? SHOW_ADS : HIDE_ADS); 
} 

@Override 
public boolean getSignedInGPGS() { 
    // TODO Auto-generated method stub 
    //return false; 
    return gameHelper.isSignedIn(); 
} 

@Override 
public void loginGPGS() { 
    // TODO Auto-generated method stub 
    try { 
     runOnUiThread(new Runnable(){ 
      public void run() { 
       gameHelper.beginUserInitiatedSignIn(); 
      } 
     }); 
    } catch (final Exception ex) { 
    } 

} 

@Override 
public void submitScoreGPGS(int score) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void unlockAchievementGPGS(String achievementId) { 
    // TODO Auto-generated method stub 

    Games.Achievements.unlock(gameHelper.getApiClient(), achievementId); 
    //Games.Achievements. 

} 

//@Override 
public void revealAchievementGPGS(String achievementId) { 
    // TODO Auto-generated method stub 

    Games.Achievements.reveal(gameHelper.getApiClient(), achievementId); 
    //Games.Achievements. 

} 

@Override 
public void getLeaderboardGPGS() { 
    // TODO Auto-generated method stub 

} 

@Override 
public void getAchievementsGPGS() { 
    // TODO Auto-generated method stub 

    if (gameHelper.isSignedIn()) { 
      startActivityForResult(Games.Achievements.getAchievementsIntent(gameHelper.getApiClient()), 101); 
     } 
     else if (!gameHelper.isConnecting()) { 
     loginGPGS(); 
     } 

} 

@Override 
public void onSignInFailed() { 
    // TODO Auto-generated method stub 

    // Sign in has failed. So show the user the sign-in button. 
    findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE); 
    findViewById(R.id.sign_out_button).setVisibility(View.GONE); 

} 

@Override 
public void onSignInSucceeded() { 
    // TODO Auto-generated method stub 
    //loginGPGS(); 

    // show sign-out button, hide the sign-in button 
    findViewById(R.id.sign_in_button).setVisibility(View.GONE); 
    findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE); 

    // (your code here: update UI, enable functionality that depends on sign in, etc) 

} 

public boolean isNetworkConnected() { 
     cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     ni = cm.getActiveNetworkInfo(); 
     if (ni == null) { 
     // There are no active networks. 
     return false; 
     } else 
     return true; 
    } 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 

    if (v.getId() == R.id.sign_in_button) { 
     // start the asynchronous sign in flow 
     gameHelper.beginUserInitiatedSignIn(); 
    } 
    else if (v.getId() == R.id.sign_out_button) { 
     // sign out. 
     gameHelper.signOut(); 

     // show sign-in button, hide the sign-out button 
     findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE); 
     findViewById(R.id.sign_out_button).setVisibility(View.GONE); 
    } 

} 

} 
+0

또한이 단추는 전혀 표시되지 않습니다. 그저 레이아웃에 제대로 추가하고 주 활동에서 사용하는 방법을 알려주지는 않습니다. ( – Redbu11

답변

0

응용 프로그램이 충돌한다 LinearLayout과 관련된 android : id가 없습니다 (이 경우에는 android : id = "@ + id/main"을 추가해야합니다)

숨기기 위해 이것을 참조하려고 할 때 실제로 생성 된 레이아웃이 예상 한 것이 아니므로 충돌이 발생합니다.

+0

흠, 내 생각에 내 공용 클래스 AndroidLauncher는 AndroidApplication 및 Activity가 아닌 클래스를 확장합니다. setContentView (R.layout.main) 호출, 그것은 작동하지만 위대한,하지만 단추를 추가하고 그들을 호출하려고 할 때 - 그것은 충돌합니다. 레이아웃 파일의 이름에서 ID를 얻지 않는다? 내 경우 해당 main.xml, 그래서 나는 setContentView (R.layout.main)를 호출하는데, ".main"은 id가 아닌 곳인가요? 아니면 id를 .xml에 설정하여 버튼을 추가 할 수 있습니까? – Redbu11

+0

Cant check ur answer btw, 나는 안드로이드 특정 코드에 버튼을 추가하지 않기로 결정 ... 그래서 나는 그것을 합법적 인 xD 소리로 대답으로 간주합니다 – Redbu11

관련 문제