質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

1773閲覧

Listviewからの画面推移について

Kenshiro_Fukuda

総合スコア21

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2018/02/01 04:00

Xamarin.FormsでListviewを組み込み、さらにその次のページへと移動させようとすると、次のことが起こりました。

Listviewで本当は出したいもの:A,b,c,dがあり、それぞれのListから対応させたページに行くようにする。
なので、ListのAをタップしたらAへいき、BをタップしたらBへいけるように。
対応していないところは対応なしのアラーとを出したい

実際:どのListをタップしても、Dのページが出てきてしまい、戻るボタンでD→C→と戻っていってようやくListにいく。

どのあたりがあいまいなのかを教えてくれると幸いです。

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6 7using Xamarin.Forms; 8using Xamarin.Forms.Xaml; 9using System.Collections.ObjectModel; // 10 11namespace BVETimetable.time 12{ 13 [XamlCompilation(XamlCompilationOptions.Compile)] 14 public partial class area : ContentPage 15 { 16 // 任意のListViewを生成する 17 ObservableCollection<ItemClass> _page1 = new ObservableCollection<ItemClass>(); 18 19 //任意の文字列の設定(ここに追加する) 20 public string[] _loacls = 21 { 22 "A","B","C","D" 23 }; 24 public string _select; 25 26 public area() 27 { 28 InitializeComponent(); 29 // iOSだけ、上部に余白をとる 30 Padding = new Thickness(0, Device.OnPlatform(20, 0, 0), 0, 0); 31 32 for (int i = 0; i < _loacls.Length; i++) 33 { 34 _page1.Add(new ItemClass { Word = _loacls[i] }); 35 } 36 arealist.ItemsSource = _page1; 37 38 //セル選択→上から行って、Aフォルダのページへ画面推移 39 40 //arealist.ItemSelected += (sender, e) => { _select = _loacls[_page1.IndexOf((ItemClass)(arealist.SelectedItem))];}; 41 42 43 44 arealist.ItemTapped += async (sender, args) => 45 { await Navigation.PushModalAsync(new hokkaido.kouro()); arealist.SelectedItem = "A";}; 46 47 48 arealist.ItemTapped += async (sender, args) => 49 { await Navigation.PushModalAsync(new tohoku.kouro()); arealist.SelectedItem = "B"; }; 50 51 52 } 53 54 55 } 56 57 public class ItemClass 58 { 59 public string Word { get; set; } 60 } 61 62 63 //北海道が選択されたとき 64} 65

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

ItemTappedイベントを複数購読するとListViewの任意のセルをタップするたびにAの処理もBの処理も同時に走ってしまって良くないと思います。
ItemTappedは一つにして中で分岐するようにするとうまくいくのではないでしょうか?
もしかするとTappedだとその時点ではselecteditemにセットされていないかもしれないのでうまくいかない場合はItemSelectedの方でやってみてください。

csharp

1arealist.ItemTapped += async (sender, args) =>{ 2 var word =(arealist.SelectedItem as ItemClass).Word; 3 Page targetPage; 4 switch(word){ 5 case "A": 6 targetPage = new hokkaido.kouro(); 7 break; 8 case "B": 9 targetPage = new tohoku.kouro(); 10 break; 11 //以下略 12 } 13 14 15 await Navigation.PushModalAsync(targetPage); 16}; 17

投稿2018/02/01 08:31

kamu

総合スコア208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kenshiro_Fukuda

2018/02/01 12:43 編集

ちなみに、この時、最終業においてTargetpageが未割当のローカル変数が充てられたとはねられてしまうのですが、対策としてはどうしたほうがいいですか??
kamu

2018/02/01 12:48

仕様次第ですがswitchでdefaltでreturnさせても良いですし、Pushする前にnullチェックしても良いと思います。
Kenshiro_Fukuda

2018/02/01 12:52

今回の場合はどっちが書きやすいですか??
kamu

2018/02/01 12:58

それに関しては私からは答えようがないです。どうしたいかで決めたら良いと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問