2016-08-18 7 views
0

私は、スピナーを使って2つのアクティビティをAndroidアプリケーションで切り替える方法があるのだろうかと思っていました。私はスピナーの最初の項目がアクティブになる最初のアクティビティが選択され、その逆の場合に欲しいです。私はこれを試してみましたが、応答がありませんでした: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ファイルです私はスピナーを追加しました:私は何とか主な活動の中からスピナー配列リストにアクセスしたり、FindViewByIdメソッドを使用して、それを開始しなければならない場合

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

は、だから私は思っていたので、私は、条件付き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; 

これは私の第二のアクティビティに私を送り、それは私の第2のレイアウトをロードします。しかし、私は戻って最初の1に取得するには、このコードを使用し、私の第二の活動に:私は(ケース0)を行う場合、スピナーは私の最初の項目にとどまるので、それはさわやかに保つため

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

私は再び(ケース1)を使用します。このように、ケース1を2回使用すると、それらの間を入れ替えることができますが、アイテムのテキストは正しくありません。基本的には、「ケース1」または「アイテム1」をクリックし、2番目のアクティビティに進みます。スピナーの選択に応じて、活動を変更

+0

フラグメントの使用はどうですか? – Mulflar

+0

'StartActivity(新しいインテント(アクティビティ、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

[OK]を見てみましょう: あなたのメインページのようなものになります:あなたMainActivityに続いて

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

あなたは持っているでしょう:

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; 
    } 

スピナーがトップで、これまでになりますそのように、それは1つのビューを表示します次に、スピナーをもう一度変更して、もう一方のビューを表示することができます。 私のアプリでは、スピナーの代わりにボタンを使用しています。 私はそれが助けてくれることを願っています。

+0

私は両方の答えの組み合わせでそれをやりました。しかし、今問題は選択された選択が常にデフォルトのものではないということです。つまり、2番目のオプションを選択して2番目のレイアウトで2番目のアクティビティに移動しても、スピナーは最初のオプションにとどまります。 – Nivalen

+0

スピナーの項目選択機能のコードを共有できますか? – Mulflar

+0

コードを編集しました。 – Nivalen