2014-04-22 5 views
0

기본적으로 내가 클릭하는 버튼은 상점을위한 것이므로 업그레이드 구매가 가능한 PopUpWindow가 나타나게하고 싶다. (쿠키 크리커 메뉴). 그러나 버튼을 클릭하면 앱이 다운됩니다. 누군가의 비슷한 게시물은 contentView가 설정되지 않았기 때문에 생성 된 오류가 발생했다는 것을 설명했기 때문에 이것을 설정했지만 팝업으로 사용중인 레이아웃으로 contentView를 설정하면 작동합니다. 메인 레이아웃이 아닌 팝업.버튼을 클릭하면 내 PopUpWindow가 열리지 않는다.

내 자바 코드 :

package com.bipbapapps.leagueclickerapp; 


import android.app.Activity; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.graphics.Typeface; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Gravity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.Button; 
import android.widget.PopupWindow; 
import android.widget.TextView; 

public class MainClass extends Activity implements OnClickListener { 


public float goldCount; 
Button minionClick; 
Button storeClick; 
TextView textGoldCount; 
String textTotal; 
private SharedPreferences prefs; 

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

    //Set full-screen 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    setContentView(R.layout.mainlayout); 

    prefs = getSharedPreferences("LeagueClicker", Context.MODE_PRIVATE); 


    goldCount = prefs.getFloat("goldCount", 0.0f); 

    //Linking the variables 
    minionClick = (Button) findViewById(R.id.minioncentreid); 
    storeClick = (Button) findViewById(R.id.storeimageid); 
    textGoldCount = (TextView) findViewById(R.id.textviewtop); 

    //String which will display at the top of the app 
    textTotal = goldCount + " Gold"; 

    //Setting TextView to the String 
    textGoldCount.setText(textTotal); 
    textGoldCount.setGravity(Gravity.CENTER); 
    Typeface tf = Typeface.createFromAsset(getAssets(), "mechanical.ttf"); 
    textGoldCount.setTypeface(tf); 
    textGoldCount.setTextSize(35); 

    //Setting onClickListener 
    minionClick.setOnClickListener(this); 
    storeClick.setOnClickListener(this); 

} 


@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()){ 
    case R.id.minioncentreid: 
    goldCount += 1.0; 
    prefs.edit().putFloat("goldCount", goldCount).commit(); 
    textTotal = goldCount + " Gold"; 
    textGoldCount.setText(textTotal); 
    textGoldCount.setGravity(Gravity.CENTER); 
    break; 

    case R.id.storeimageid: 
     LayoutInflater inflater = (LayoutInflater) 
      this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     PopupWindow pw = new PopupWindow(
      inflater.inflate(R.layout.storemenu, null, false), 
      100, 
      100, 
      true); 
     pw.showAtLocation(this.findViewById(R.id.storemenuid), Gravity.CENTER, 0, 0); 

    } 


} 


@Override 
public void onPause(){ 
    super.onPause(); 
    prefs.edit().putFloat("goldCount", goldCount).commit(); 
} 

@Override 
public void onResume(){ 
    super.onResume(); 
    goldCount = prefs.getFloat("goldCount", 0.0f); 
} 

@Override 
public void onStop(){ 
    super.onStop(); 
    prefs.edit().putFloat("goldCount", goldCount).commit(); 
    Log.d(prefs.getFloat("goldCount", 0.0f)+"derprolw", "ejwfjbrea"); 
} 




} 

로그 캣 오류 :

04-22 06:24:52.408: D/gralloc_goldfish(2931): Emulator without GPU emulation detected. 
04-22 06:24:57.808: D/dalvikvm(2931): GC_FOR_ALLOC freed 2121K, 10% free 20151K/22340K, paused 111ms, total 114ms 
04-22 06:24:58.368: D/AndroidRuntime(2931): Shutting down VM 
04-22 06:24:58.368: W/dalvikvm(2931): threadid=1: thread exiting with uncaught exception (group=0xb2a1cba8) 
04-22 06:24:58.418: E/AndroidRuntime(2931): FATAL EXCEPTION: main 
04-22 06:24:58.418: E/AndroidRuntime(2931): Process: com.bipbapapps.leagueclickerapp, PID: 2931 
04-22 06:24:58.418: E/AndroidRuntime(2931): java.lang.NullPointerException 
04-22 06:24:58.418: E/AndroidRuntime(2931):  at android.widget.PopupWindow.showAtLocation(PopupWindow.java:814) 
04-22 06:24:58.418: E/AndroidRuntime(2931):  at com.bipbapapps.leagueclickerapp.MainClass.onClick(MainClass.java:86) 
04-22 06:24:58.418: E/AndroidRuntime(2931):  at android.view.View.performClick(View.java:4438) 
04-22 06:24:58.418: E/AndroidRuntime(2931):  at android.view.View$PerformClick.run(View.java:18422) 
04-22 06:24:58.418: E/AndroidRuntime(2931):  at android.os.Handler.handleCallback(Handler.java:733) 
04-22 06:24:58.418: E/AndroidRuntime(2931):  at android.os.Handler.dispatchMessage(Handler.java:95) 
04-22 06:24:58.418: E/AndroidRuntime(2931):  at android.os.Looper.loop(Looper.java:136) 
04-22 06:24:58.418: E/AndroidRuntime(2931):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
04-22 06:24:58.418: E/AndroidRuntime(2931):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-22 06:24:58.418: E/AndroidRuntime(2931):  at java.lang.reflect.Method.invoke(Method.java:515) 
04-22 06:24:58.418: E/AndroidRuntime(2931):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
04-22 06:24:58.418: E/AndroidRuntime(2931):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
04-22 06:24:58.418: E/AndroidRuntime(2931):  at dalvik.system.NativeStart.main(Native Method) 
04-22 06:25:01.358: I/Process(2931): Sending signal. PID: 2931 SIG: 9 

사람이 내가이 문제를 해결 수있는 방법을 알고 있나요? 기술적으로는 동일로,

pw.showAtLocation(this.findViewById(R.id.storemenuid), Gravity.CENTER, 0, 0); 

v를 this.findViewById (R.id.storemenuid)를 교체하십시오 : 당신이 (? 라인 86)이 줄에 널 포인터를 가지고있는 것처럼

+0

는'mainlayout.xml' 내부'storemenuid'인가? – codeMagic

+0

MainClass.java의 줄 번호 86에 null 포인터 사용이 있습니다. –

답변

0

나에게 보이는 v가 null이 아니거나이 행에 도달하지 않는다는 것을 제외하고는 알 수 있습니다. 또한 다른 값은 상수이므로 null이 아님을 알 수 있습니다.

이 도움이되는지 또는 더 자세한 정보를 알려주십시오.


편집

또 다른 원인은 생성자에있을 수 있습니다 :

PopupWindow pw = new PopupWindow(
     inflater.inflate(R.layout.storemenu, null, false), 
     100, 
     100, 
     true); 

하지만 널 포인터를 통보해야로서 그 라인에 언급이 덜 찾기 . 로 할

+0

와우, 작동합니다! 진드기, 친구 <3 – BipBapApps

+0

잘하고 확실하지 않은 이유가 있습니다. 그들은 둘 다 똑같은 것을 지적해야하지만, v를 사용하면 어쨌든 속도 측면에서 더 좋을 것입니다. –

+0

그래서, PopUpWindow를 닫기 위해 버튼에 붙이는 명령은 무엇입니까? – BipBapApps

0

시도는 다음과 같습니다

PopupWindow.setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);