2014-04-22 53 views
0

基本上,我單擊的按鈕是用於商店的,我希望它會導致出現一個PopUpWindow,您可以從中購買升級(很像Cookie Clicker菜單)。但是,當我點擊按鈕時,應用程序崩潰。有人的類似帖子說,產生的錯誤是由於contentView沒有被設置的結果,所以我設置了這個,但只有當我將contentView設置爲我用作彈出窗口的佈局時纔有效,這意味着我有一個彈出窗口,但不能覆蓋原始的主要佈局。當我點擊按鈕時,我的PopUpWindow無法打開

我的Java代碼:

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"); 
} 




} 

logcat的錯誤:

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 

有誰知道我怎麼可能會解決這個問題?

+0

是'mainlayout.xml'裏面'storemenuid'? – codeMagic

+0

MainClass.java中有第86行的空指針賦值 –

回答

0

在我看來就像你在這一行一個空指針(86線):

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

嘗試用v更換this.findViewById(R.id.storemenuid),在技術上它們是相同的除非我們知道v不是空值,否則不會達到這一行。其他值也是不變的,所以我們知道它們也不是零。

讓我知道這是否有幫助,或者它是否提供了更多信息。


編輯

而且其他原因可能是在構造函數中:

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); 
相關問題