2014-04-22 30 views
0

Fondamentalement, le bouton que je clique est pour un magasin, et je voudrais qu'il fasse apparaître une PopUpWindow à partir de laquelle vous pouvez acheter des mises à niveau (un peu comme le Clicker de Cookie) menu). Cependant, lorsque je clique sur le bouton, l'application se bloque. Quelqu'un a dit que l'erreur résultait du fait que contentView n'était pas défini, donc je l'ai défini, mais cela ne fonctionne que si je mets contentView à la disposition que j'utilise comme popup, ce qui signifie que j'ai un popup, mais pas sur l'original, la disposition principale.Mon PopUpWindow ne s'ouvre pas quand je clique sur le bouton

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




} 

erreurs de 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 

Est-ce que quelqu'un sait comment je peux résoudre ce problème?

+0

est '' storemenuid' l'intérieur mainlayout.xml'? – codeMagic

+0

Il n'y a pas de pointeur d'excption à la ligne num 86 dans MainClass.java –

Répondre

0

Me semble que vous avez un pointeur NULL à cette ligne (ligne 86?):

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

Essayez de remplacer this.findViewById (R.id.storemenuid) avec v, car ils sont techniquement le même sauf que nous savons que v n'est pas nul sinon cette ligne ne serait pas atteinte. Les autres valeurs sont également constantes, donc nous savons qu'elles ne sont pas nulles non plus.

laissez-moi savoir si cela aide, ou si elle vous fournit plus d'informations.


modifier

également une autre cause pourrait être dans le constructeur:

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

Mais je trouve cela moins probable qu'il aurait dû être informé du pointeur NULL se référant à cette ligne .

+0

Wow, ça marche! Avoir une tique, un ami <3 – BipBapApps

+0

Bon, je ne sais pas pourquoi. Comme ils devraient tous les deux pointer vers la même chose, mais utiliser v serait mieux de toute façon en termes de vitesse. –

+0

Alors, quelle serait la commande à attacher à un bouton pour fermer PopUpWindow? – BipBapApps

0

Essayez de faire comme suit:

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