2016-08-18 5 views
0

회 전자를 사용하여 안드로이드 응용 프로그램에서 2 가지 활동 사이를 전환하는 방법이 있는지 궁금합니다. 스피너의 첫 번째 항목이 활성화 될 첫 번째 활동을 선택하고 그 반대의 경우를 원합니다. 나는이 시도했지만 응답이 없었다 :C# xamarin switching activities

if (spinner.SelectedItem == item1) { 
Start Activity (Activity2) 
} 

것은 내가 이렇게 내 스피너에 항목을 추가 할 strings.xml의 파일을 사용하는 것입니다 :

<string-array name:"spinnerItems"> 
<item id="item1">...</item> 
<item id="item2">...</item> 
</string-array> 

을 그리고 이것은 내 main.xml에 파일이있는 곳입니다 나는 스피너를 추가 :

그래서
<Spinner 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:id="@+id/spinner" 
android:entries="@array/spinnerItems"/> 

어떻게 든 주요 활동 내부에서 회 전자 배열 목록에 액세스하거나 findViewById를 방법을 사용하여 시작해야한다면 궁금 해서요, 그래서 조건부 statem에 대한 항목을 사용할 수 있습니다 ent.

편집 :

void Spinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e) 
     { 
      int selectedPositon = e.Position; 
      switch(e.Position) 
      { 
       case 1: 
        StartActivity(typeof(Activity2)); 
        break; 
      } 
     } 
spinner.ItemSelected += Spinner_ItemSelected; 

이 내게는 내 두 번째 활동에 전송하고 그 내 두 번째 레이아웃을로드합니다. 그러나 내 두 번째 활동에서 나는 처음으로 돌아 가야 코드를 사용

나는 (사례 1)를 사용
void Spinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e) 
     { 
      int selectedPositon = e.Position; 
      switch (e.Position) 
      { 
       case 1: 
        StartActivity(typeof(MainActivity)); 
        break; 
      } 
     } 

다시 내가 (경우 0)을 할 경우 스피너 내 첫 번째 항목에 남아 있기 때문에 상쾌하게 유지하기 때문에 . 그렇게하면 케이스 1을 두 번 사용하면 두 텍스트를 서로 바꿀 수 있지만 항목 텍스트가 올바르지 않습니다. 기본적으로 "사례 1"또는 "항목 1"을 클릭하고 두 번째 활동으로 이동합니다. 스피너의 선택에 따라

+0

조각 사용은 어떻게됩니까? – Mulflar

+0

'StartActivity (새로운 의도 (Activity, typeof (Activity2)));'작동해야합니다 –

+0

파편이란 무엇입니까? – Nivalen

답변

0

변경 활동은 다음 코드를 사용하여 수행 할 수 있습니다

spinner.ItemSelected += Spinner_ItemSelected; 

void Spinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e) 
{ 
    switch(e.Position) 
    { 
     case 0: 
     StartActivity(...); 
     break; 
     ... 
    } 
} 
+0

좋습니다.하지만 두 위치 모두 내 선택 항목 (item1 및 item2)을 어떻게 사용합니까? – Nivalen

+0

나는 당신의 목표가 무엇인지 이해하지 못합니다. 항목 1 (위치 1) 또는 항목 2 (위치 2)를 선택하십시오. 내 이해에서 무엇을 놓치겠습니까? –

+0

내 항목이 생각했던 것과 완전히 다릅니다. 나는 그들을 부름의 직접적인 방법이 없다. – Nivalen

0

확인을 보자 : 귀하의 메인 페이지가 같은 것입니다 : 당신의 다음

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:descendantFocusability="beforeDescendants" 
    android:focusableInTouchMode="true"> 
    <Spinner 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/spinner" 
     android:entries="@array/spinnerItems"/> 
    <FrameLayout 
     android:id="@+id/spinner_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</LinearLayout> 

를 MainActivity .cs를 갖게됩니다 :

FragmentClass1 Fragment1; 
    FragmentClass2 Fragment2; 

    protected override void OnCreate (Bundle bundle) 
    { 
     base.OnCreate (bundle); 
     SetContentView (Resource.Layout.detalleVisita); 

     Fragment1= new FragmentClass1(); 
     Fragment2= new FragmentClass2(); 

     Spinner spinner = this.FindViewById<Spinner>Resource.Id.spinner); 
     spinner.ItemSelected += new EventHandler<AdapterView.ItemSelectedEventArgs>(spinner_ItemSelected); 
    } 
    void spinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e) 
    { 
     int selectedSpinn = e.Position; 
     if(selectedSpinn ==0) 
     { 
      //THAT DOES THE CHANGE OF FRAGMENT 
      FragmentTransaction fragmentTx = this.FragmentManager.BeginTransaction(); 
      fragmentTx.Replace(Resource.Id.spinner_fragment, Fragment1); 
      fragmentTx.SetTransition (FragmentTransit.FragmentFade); 
      fragmentTx.Commit(); 
     } 
     else if(selectedSpinn ==1) 
     { 
      //THAT DOES THE CHANGE OF FRAGMENT 
      FragmentTransaction fragmentTx = this.FragmentManager.BeginTransaction(); 
      fragmentTx.Replace(Resource.Id.spinner_fragment, Fragment2); 
      fragmentTx.SetTransition (FragmentTransit.FragmentFade); 
      fragmentTx.Commit(); 
     } 
    } 

당신의 조각에 당신은 항상 같은 뷰를 만들 것입니다, 당신의 FragmenX.cs이 모양을 X.axml :

public class FragmentClass1 : Fragment 
{ 
    public override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 
    } 
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View view = inflater.Inflate(Resource.Layout.Fragment1, container, false); 
     //THIS IS FOR IF YOU NEED ACCESO TO CONTEXT, 
     // OR MAINACTIVITY PROPERTIES OR FUNCTIONS 
     MainActivity myActivity = (MainActivity)this.Activity; 

     return view; 
    } 

그 방법 스피너는 회 전자의 선택을 변경하는 경우가 하나 개의보기를 표시합니다, 상단에 어느 것 , 그리고 나서 스피너를 다시 변경하고 다른보기를 볼 수 있습니다. 내 응용 프로그램에서 나는 스피너 대신 버튼을 사용합니다. 도움이되기를 바랍니다.

+0

좋아, 나는 그 두 가지 대답을 조합하여 할 수 있었다. 그러나 이제 문제는 선택한 선택이 항상 맨 위에있는 기본 선택이 아니라는 것입니다. 즉, 두 번째 옵션을 선택하고 두 번째 레이아웃으로 두 번째 활동으로 이동하더라도 스피너는 첫 번째 옵션에 머물러 있습니다. – Nivalen

+0

스피너 아이템 선택 기능의 코드를 공유 할 수 있습니까? – Mulflar

+0

코드를 편집했습니다. – Nivalen