2014-03-31 4 views
0

여기에 정말 이상한 문제가 있습니다. 내 모토 G, 안드로이드 4.4에서 잘 작동하는 PopupWindow 있습니다. 하지만 지금은 갤럭시 Y 안드로이드 2.3.6에서 테스트 중이며 팝업이 인스턴스화에 충돌하고있는 것으로 보입니다.인스턴스화시 PopupWindow가 충돌 함

내 코드 :

팝업 변수는 전역 변수로 선언
// Function called when user hit the send button on screen 
public void showPopUp (View v) { 
    // Getting location of the popup window 
    int [] location = new int[2]; 
    imgBtn.getLocationOnScreen(location); 
    p = new Point(); 
    p.x = location[0]; 
    p.y = location[1]; 

    int popupWidth = 300; 
    int popupHeight = 200; 

    // Changing button icon 
    imgBtn.setBackgroundResource(R.drawable.img_on); 

    // Inflate the popup_layout.xml 
    LinearLayout viewGroup = (LinearLayout) findViewById(R.id.popup); 
    LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View layout = layoutInflater.inflate(R.layout.send_image_popup, viewGroup); 
    // Creating the PopupWindow 
    popup = new PopupWindow(); 
    Log.d("POPUP", "dummiedebug"); 
    popup.setContentView(layout); 
    popup.setWidth(popupWidth); 
    popup.setHeight(popupHeight); 
    popup.setFocusable(true); 


    // Some offset to align the popup a bit to the right, and a bit up, relative to button's position. 
    int OFFSET_X = 1; 
    int OFFSET_Y = 30; 

    popup.setBackgroundDrawable(new BitmapDrawable()); 

    // Displaying the popup at the specified location, + offsets 
    popup.showAtLocation(layout, Gravity.NO_GRAVITY, p.x + OFFSET_X, p.y - OFFSET_Y - popupHeight); 

    // Changing photo ico back to gray 
    popup.setOnDismissListener(new PopupWindow.OnDismissListener() { 
     @Override 
     public void onDismiss() { 
      imgBtn.setBackgroundResource(R.drawable.img_off); 
     } 
    }); 

} 

:

private PopupWindow popup; 

임 수신 스태킹 오류는 다음과 같습니다

03-30 20:59:01.398: E/AndroidRuntime(27008): FATAL EXCEPTION: main 
03-30 20:59:01.398: E/AndroidRuntime(27008): java.lang.IllegalStateException: Could not execute method of the activity 
03-30 20:59:01.398: E/AndroidRuntime(27008): at android.view.View$1.onClick(View.java:2144) 
03-30 20:59:01.398: E/AndroidRuntime(27008): at android.view.View.performClick(View.java:2485) 
03-30 20:59:01.398: E/AndroidRuntime(27008): at android.view.View$PerformClick.run(View.java:9080) 
03-30 20:59:01.398: E/AndroidRuntime(27008): at android.os.Handler.handleCallback(Handler.java:587) 
03-30 20:59:01.398: E/AndroidRuntime(27008): at android.os.Handler.dispatchMessage(Handler.java:92) 
03-30 20:59:01.398: E/AndroidRuntime(27008): at android.os.Looper.loop(Looper.java:130) 
03-30 20:59:01.398: E/AndroidRuntime(27008): at android.app.ActivityThread.main(ActivityThread.java:3687) 
03-30 20:59:01.398: E/AndroidRuntime(27008): at java.lang.reflect.Method.invokeNative(Native Method) 
03-30 20:59:01.398: E/AndroidRuntime(27008): at java.lang.reflect.Method.invoke(Method.java:507) 
03-30 20:59:01.398: E/AndroidRuntime(27008): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
03-30 20:59:01.398: E/AndroidRuntime(27008): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
03-30 20:59:01.398: E/AndroidRuntime(27008): at dalvik.system.NativeStart.main(Native Method) 
03-30 20:59:01.398: E/AndroidRuntime(27008): Caused by: java.lang.reflect.InvocationTargetException 
03-30 20:59:01.398: E/AndroidRuntime(27008): at java.lang.reflect.Method.invokeNative(Native Method) 
03-30 20:59:01.398: E/AndroidRuntime(27008): at java.lang.reflect.Method.invoke(Method.java:507) 
03-30 20:59:01.398: E/AndroidRuntime(27008): at android.view.View$1.onClick(View.java:2139) 
03-30 20:59:01.398: E/AndroidRuntime(27008): ... 11 more 
03-30 20:59:01.398: E/AndroidRuntime(27008): Caused by: java.lang.NullPointerException 
03-30 20:59:01.398: E/AndroidRuntime(27008): at android.widget.PopupWindow.setContentView(PopupWindow.java:384) 
03-30 20:59:01.398: E/AndroidRuntime(27008): at android.widget.PopupWindow.<init>(PopupWindow.java:286) 
03-30 20:59:01.398: E/AndroidRuntime(27008): at android.widget.PopupWindow.<init>(PopupWindow.java:266) 
03-30 20:59:01.398: E/AndroidRuntime(27008): at android.widget.PopupWindow.<init>(PopupWindow.java:223) 
03-30 20:59:01.398: E/AndroidRuntime(27008): at br.com.chatApp.activities.Chat.showPopUp(Chat.java:224) 
03-30 20:59:01.398: E/AndroidRuntime(27008): ... 14 more 

가 나는 또한 그것을 debbuged 적절한 방법과 것은 단지 new PopupWindow() 명령에 충돌합니다 : S

+0

라인 224 란 무엇입니까? – codeMagic

답변

0

레이아웃 및 팝업이 이 아니기 때문에 NPE이 발생했을 수 있습니다. Context. 다음과 같이 showPopUp(Context context)을 사용하여 컨텍스트를 연결하십시오 : 다음

public void showPopUp (Context context) { 
    // ... 
    LinearLayout viewGroup = (LinearLayout) context.findViewById(R.id.popup); 
    LayoutInflater layoutInflater = (LayoutInflater) 
        context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View layout = layoutInflater.inflate(R.layout.send_image_popup, viewGroup); 

    popup = new PopupWindow(context); 
    // ... 
} 

와, 위의이 메서드를 호출 할 때, 수행

// pass your Activity (context) 
showPopUp(MyActivity.this); 

이 도움이되는지 알려주세요.

+0

고마워, 그게 효과가있어. 컨텍스트를 전달하는 대신 'context '변수 대신'Chat.this '를 넣습니다. 이 함수는 내 Activity 클래스 안에 있기 때문에 왜 이런 일이 발생하는지 알지 못했습니다. 설명해 주시겠습니까? 고마워요 :) –

+0

네, 당신은 * Activity.this *, * this * 또는 * getApplicationContext() * .. 원하는대로 컨텍스트를 얻을 수 있습니다! 또한 공용 메서드는 응용 프로그램의 어느 곳에서나 호출 할 수 있고 항상 컨텍스트에서 레이아웃을 확장해야하므로 컨텍스트와 관련되어야합니다 (따라서 변수를 사용하는 것이 낫습니다). 어쨌든, 컨텍스트없이 레이아웃을 확장 할 수 없습니다. 마지막으로 * showPopUp 메서드가 컨텍스트 컨텍스트 또는 뷰 뷰를 인수로 사용하기 때문에 메서드에 액티비티가 있어도 이것을 얻지 못했다고 생각합니다. 참조를 확인하십시오. 따라서 장소에 관계없이 컨텍스트를 사용하여 작업해야합니다. – Fllo

+0

감사합니다. Fllo,하지만 여기 SDK의 버그에 대해 이야기하고 있다고 생각합니다. 나는 onCreate 메서드에서 PopupWindow를 만들려고 시도했지만 여전히 새로운 PopupWindow()가 충돌하고 새로운 PopupWindow (Activity.this)는 Android 2.3.6에서 작동합니다 (4.4에서는 잘 작동합니다). 우리가 미래에 이걸 다시 만난다면 그냥 말하는 것입니다. 어쨌든, 다시 한번 감사드립니다. –