2017-12-04 7 views
0

저는 VS Community 2017의 Xamarin Android 안의 앱에서 작업하고 있습니다. PopupFAB - FloatingActionButton에서 시작하고 싶습니다. 내가 별도로 팝업 xml 레이아웃을 만들었고 팝업을 시작할 때 디버거가 예외를 throw하지만 표시되는 오류 코드가 없으므로 문제의 원인을 알지 못합니다.코드에서 팝업을 열면 예외가 발생합니다

내 생각 엔 팝업 용 XML 레이아웃 파일에 문제가있는 것 같습니다. 나는 그것을 여러 번 확인했지만 모든 것이 나에게 괜찮은 것처럼 보인다. 안드로이드의 RelativePanel은 UWP와 크게 다르며 어쩌면 내가 잘못하고있는 것일 수도 있습니다.

어쨌든

, 여기에 코드 ... 팝업 레이아웃 :

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:padding="5dp"> 
<TextView 
    android:text="Sort By:" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:layout_width="120dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/moviesSortByText" 
    android:minHeight="28dp" 
    android:gravity="left|center_vertical" /> 
<Spinner 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/moviesSortSpinner" 
    android:minWidth="120dp" 
    android:minHeight="28dp" 
    android:layout_alignParentEnd="true" 
    android:layout_toRightOf="@id/moviesSortByText" /> 
<TextView 
    android:text="Genre:" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:layout_width="120dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/moviesGenresText" 
    android:layout_below="@id/moviesSortByText" 
    android:minHeight="28dp" 
    android:gravity="left|center_vertical" /> 
<Spinner 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/moviesSortByText" 
    android:id="@+id/moviesGenresSpinner" 
    android:minWidth="120dp" 
    android:minHeight="28dp" 
    android:layout_alignParentEnd="true" 
    android:layout_toRightOf="@id/moviesGenresText" /> 
<TextView 
    android:text="Country:" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:layout_width="120dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/moviesCountryText" 
    android:layout_below="@id/moviesGenresText" 
    android:minHeight="28dp" 
    android:gravity="left|center_vertical" /> 
<Spinner 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/moviesGenresText" 
    android:id="@+id/moviesCountrySpinner" 
    android:minWidth="120dp" 
    android:minHeight="28dp" 
    android:layout_alignParentEnd="true" 
    android:layout_toRightOf="@id/moviesCountryText" /> 
</RelativeLayout> 

활동에 뒤에 코드 :

moviesOptionsBtn = FindViewById<FloatingActionButton>(Resource.Id.moviesOptionsFAB); 
moviesOptionsBtn.Click += MoviesOptionsBtn_Click; 

    private void MoviesOptionsBtn_Click(object sender, EventArgs e) 
    { 
     // create a flyout with 3 spinners for sorting, genres and countries 
     var popupView = LayoutInflater.Inflate(Resource.Layout.moviesOptionsPopupLayout, null); 
     var popupWindow = new PopupWindow(popupView, ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent, true) 
     { 
      Touchable = true, 
      Focusable = true, 
      OutsideTouchable = true 
     }; 
     // find spinners and fill them with values 
     sortSpinner = popupView.FindViewById<Spinner>(Resource.Id.moviesSortSpinner); 
     genreSpinner = popupView.FindViewById<Spinner>(Resource.Id.moviesGenresSpinner); 
     countrySpinner = popupView.FindViewById<Spinner>(Resource.Id.moviesCountrySpinner); 
     sortSpinner.Adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleSpinnerItem, Android.Resource.Layout.SimpleSpinnerDropDownItem, ViewHelper.SortList); 
     genreSpinner.Adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleSpinnerItem, Android.Resource.Layout.SimpleSpinnerDropDownItem, ViewHelper.GenresList); 
     countrySpinner.Adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleSpinnerItem, Android.Resource.Layout.SimpleSpinnerDropDownItem, ViewHelper.CountryList); 
     // register selections 
     sortSpinner.ItemSelected += MoviesOptionsSpinner_ItemSelected; 
     genreSpinner.ItemSelected += MoviesOptionsSpinner_ItemSelected; 
     countrySpinner.ItemSelected += MoviesOptionsSpinner_ItemSelected; 

     popupWindow.ShowAsDropDown(moviesOptionsBtn); 
    } 

FAB 괜찮 표시되고 예외가 후에 만 ​​발생합니다 마지막 줄. 다른 모든 코드는 정상적으로 작동하는 것 같습니다.

누군가 내 코드를보고 내가 잘못하고있는 것이 있는지 알려 줄 수 있습니까?

+0

우선 : 당신은 프로젝트를 청소 했습니까? IDE를 다시 시작하셨습니까? 상대방 레이아웃에서 모든 어린이를 삭제하고 하나씩 테스트 해보세요. 아마 어린이 문제 일 수도 있습니다. 또한 나는 아무런 실수도 없을 것이라고 믿을 수 없다. 안드로이드 로그를 확인하십시오. VS로 개발 중입니까? 그렇다면 예외가 발생하면 "계속"버튼을 다시 누르는 옵션이있을 수 있습니다. 그렇게하면 디버거가 예외를 발생시킬 수 있습니다. 행운을 빕니다! – Csharpest

+0

새 ArrayAdapter (this, Android.Resource.Layout.SimpleSpinnerItem, Android.Resource.Layout.SimpleSpinnerDropDownItem, ViewHelper.SortList) 메소드를 확인하려면 https : //developer.android.com/reference/android 링크를 참조하십시오. /widget/ArrayAdapter.html#ArrayAdapter(android.content.Context, int, int, T []), 세 번째 매개 변수가 잘못되었거나 레이아웃을 표시 할 수 있습니까? –

+0

https://developer.android.com/samples/Notifications/Application/res/layout/simple_spinner_item.html, 이것은 'SimpleSpinnerItem' 레이아웃입니다. –

답변

0

의견을 보내 주셔서 감사 드리며, 문제의 원인을 발견했습니다.

Android에서는 Spinner의 어댑터 속성이 다소 다릅니다. 내가 무슨 짓을했는지, 2 층과 3 매개 변수 중 하나

sortSpinner.Adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleSpinnerItem, Android.Resource.Layout.SimpleSpinnerDropDownItem, ViewHelper.SortList); 

에서와 같이하는 것은 TextView위한 자원 그러나 나는 안드로이드 프레임 워크에서 그것을 스타일을 통과 한 그 예외의 원인이되었다. 제대로하기 위해 나는 닫힌 Spinner에 대해 하나의 스타일 만 사용하고 열린 목록의 두 번째 리소스를 설정해야했습니다.

문제가 해결되어 나중에 참조 할 수 있도록 문제를 해결했습니다. 그래도 고마워.