2014-10-10 3 views
0

시계를 표시하는 팝업 창을 만들려고합니다. (실제로 원하는 것은 한 번에 카운트 다운 타이머이지만 한 가지입니다.) 문제는 내가 메서드를 호출 할 때입니다. 시계가 들어있는 팝업 창을 표시하려면 앱이 다운됩니다.Xamarin Android popupwindow - 비정상적으로 작동 할 때 충돌이 발생합니다.

메서드가 조각이 아닌 액티비티에서 호출되고 있습니다.

public void clockPopup() 
{ 

    LayoutInflater inflater =(LayoutInflater)this.GetSystemService(Context.LayoutInflaterService); 

    View myPopup = inflater.Inflate (Resource.Layout.PopUpClockTimer, null); 

    RunOnUiThread (() => { 
     PopupWindow popup = new PopupWindow (myPopup); 
    }); 

     } 

스택 추적은 다음과 같다 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/customborder" 
    android:orientation="vertical"> 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="1dp" 
     android:orientation="vertical"> 
     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="20dp" 
      android:orientation="vertical"> 
      <TextView 
       android:id="@+id/textout" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:text="Time sensitive offer" /> 
      <ImageView 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:src="@drawable/logo76" /> 
      <AnalogClock 
       android:id="@+id/tabAnalogClock" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" /> 
      <DigitalClock 
       android:id="@+id/tabDigitalClock" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" /> 
      <Button 
       android:id="@+id/dismiss" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:text="Dismiss" /> 
     </LinearLayout> 
    </LinearLayout> 
</LinearLayout> 

수있는 사람 : 여기

[mono] Unhandled Exception: 
[mono] Android.Views.InflateException: Exception of type 'Android.Views.InflateException' was thrown. 
[mono] at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
[mono] at Android.Runtime.JNIEnv.CallObjectMethod (IntPtr jobject, IntPtr jmethod, Android.Runtime.JValue[] parms) [0x00000] in <filename unknown>:0 
[mono] at Android.Views.LayoutInflater.Inflate (Int32 resource, Android.Views.ViewGroup root) [0x00000] in <filename unknown>:0 
[mono] at FrogPoint.Droid.MainActivity.clockPopup() [0x00020] in /Users/jakememery/Desktop/working Frogpoint/FrogPoint1.2_database/FindTheMonkey.Droid/MainActivity.cs:1548 
[mono] at FrogPoint.Droid.MainActivity+<getBeaconData>c__async3.MoveNext() [0x00258] in /Users/jakememery/Desktop/working Frogpoint/FrogPoint1.2_database/FindTheMonkey.Droid/MainActivity.cs:1215 
[mono] --- End of stack trace from previous location where exception was thrown --- 
[mono] at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x00000] in <filename unknown>:0 
[mono] at System.Runtime.CompilerServices.TaskAwaiter.GetResult() [0x00000] in <filename unknown>:0 
[mono] at FrogPoint.Droid.MainActivity+<RangingBeaconsInRegion>c__async0.MoveNext() [0x0035d] in /Users/jakememery/Desktop/working Frogpoint/FrogPoint1.2_database/FindTheMonkey.Droid/MainActivity.cs:675 
[mono] --- End of managed exception stack trace --- 
[mono] android.view.InflateException: Binary XML file line #1: Error inflating class android.widget.AnalogClock 
[mono] at android.view.LayoutInflater.createView(LayoutInflater.java:620) 
[mono] at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
[mono] at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669) 
[mono] at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694) 
[mono] at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
[mono] at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
[mono] at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
[mono] at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
[mono] at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
[mono] at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
[mono] at dalvik.system.NativeStart.run(Native Method) 
[mono] Caused by: java.lang.reflect.InvocationTargetException 
[mono] at java.lang.reflect.Constructor.constructNative(Native Method) 
[mono] at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
[mono] at android.view.LayoutInflater.createView(LayoutInflater.java:594) 
[mono] ... 10 more 
[mono] Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
[mono] at android.os.Handler.<init>(Handler.java:200) 
[mono] at android.os.Handler.<init>(Handler.java:114) 
[mono] at android.widget.AnalogClock.<init>(AnalogClock.java:57) 
[mono] at android.widget.AnalogClock.<init>(AnalogClock.java:67) 

내가 팽창 노력하고있어 XML입니다 여기

코드입니다 내가 여기서 잘못 가고있는 곳을 보아라.

+0

팽창하려는 XML 파일을 게시 할 수 있습니까? 그게 도움이 될 것입니다! – Chris

+0

안녕하세요 Chris, XML이 추가되었지만 문제가 해결 된 것 같습니다. runOnUiThread를 통해 메서드를 호출해야했습니다. 지금은 충돌이 없습니다. 하지만 지금은 .... 절대적으로 아무것도 아닙니다. 팝업 창이 표시되지 않습니다. 만약 내가 단순히 "SetContentView (Resource.Layout.PopUpClockTimer);" 그것은 잘 나타납니다,하지만 분명히 그때 팝업으로 열어주지 않을 것입니다. 그것에 대한 도움이 될 것입니다. 그렇지 않으면 새 스레드를 열어 보겠습니다. 많은 감사합니다. –

답변

0

단순히 같은 메소드를 호출하는 데 필요한 것 :

RunOnUiThread (() => { 
    clockPopup(); 
}); 

그것은 지금 충돌하지 않습니다. 하지만 불행히도 팝업을 표시하지 않습니다. 그러나 그것은 다른 게시물을위한 것입니다.

+0

사실 모든 UI 작업은 UI 스레드에서 수행해야합니다. –

0

당신도 누락 :

popup.ShowAtLocation(...); 

또는

popup.ShowAsDropDown(...); 

실제로 팝업 창을 표시합니다.

관련 문제