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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

Xamarin

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

Q&A

解決済

2回答

2019閲覧

Xanarin.AndroidのDisplayAlertに今貼っている画像のようにしたい

GId

総合スコア17

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

Xamarin

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

1グッド

1クリップ

投稿2020/04/15 08:49

編集2020/04/15 09:33

イメージ説明

Xanarin.Androidのチェックボックスで複数選択したモノをDisplayAlertで表示する

該当のソースコード

C# Xamarin.Android

補足情報(FW/ツールのバージョンなど)

Visual Studio 2019
Xamarin.Android

NakamuraYoichi👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

絵を描いていただいたので、やりたいことがとても良く分かるようになりました。ありがとうございます。

DisplayAlert にこだわらない方がよいと私は思います。階層ナビゲーション にすることを提案します。

ちょっとその前に、データのクラスを用意します。

C#

1public class Item 2{ 3 public string Name { get; set; } 4 public decimal Price { get; set; } 5 public bool IsSelected { get; set; } 6 public int Count { get; set; } 7}

最初のページを NavigationPage で包んでおきます。

C#

1public App() 2{ 3 InitializeComponent(); 4 5 MainPage = new NavigationPage(new MainPage()); 6}

MainPage、Page1、Page2 を以下のように用意します。

MainPage

MainPage

  • 開始ボタンが押されたら、データを作って Page1 に渡して、PushAsync でページ遷移します。

XAML

1<ContentPage 2(略) 3 <StackLayout> 4 <Button Text="開始" Clicked="Start_Clicked" /> 5 </StackLayout> 6</ContentPage>

C#

1public partial class MainPage : ContentPage 2{ 3 public MainPage() 4 { 5 InitializeComponent(); 6 } 7 8 private async void Start_Clicked(object sender, EventArgs e) 9 { 10 // データを準備します。 11 var items = new List<Item>(); 12 13 var coffee = new Item() 14 { 15 Name = "コーヒー", 16 Price = 600 17 }; 18 items.Add(coffee); 19 var ehomaki = new Item() 20 { 21 Name = "恵方巻", 22 Price = 500 23 }; 24 items.Add(ehomaki); 25 var roast = new Item() 26 { 27 Name = "ロースト", 28 Price = 700 29 }; 30 items.Add(roast); 31 32 // データを渡してページ1へ遷移します。 33 await Navigation.PushAsync(new Page1(items)); 34 } 35}

Page1

Page1

  • ListView を使ってデータを表示することにします。ListView のセルは、中にいろいろ作りこめる ViewCell にします。データをビューに反映するためにデータ バインディングを使っています。
  • 次へボタンが押されたら、選択されているものだけを Page2 に渡して、PushAsync でページ遷移します。
  • 画面左上の「←」で前のページに戻ることもできます。

XAML

1<ContentPage 2(略) 3 <StackLayout> 4 <ListView x:Name="ListView1"> 5 <ListView.ItemTemplate> 6 <DataTemplate> 7 <ViewCell> 8 <StackLayout Orientation="Horizontal"> 9 <CheckBox IsChecked="{Binding IsSelected}" /> 10 <Label Text="{Binding Name}" /> 11 </StackLayout> 12 </ViewCell> 13 </DataTemplate> 14 </ListView.ItemTemplate> 15 </ListView> 16 <Button Text="次へ" Clicked="Next_Clicked" /> 17 </StackLayout> 18</ContentPage>

C#

1public partial class Page1 : ContentPage 2{ 3 // データ 4 public IEnumerable<Item> Items { get; set; } 5 6 public Page1(IEnumerable<Item> items) 7 { 8 InitializeComponent(); 9 10 // データを ListView に渡します。 11 ListView1.ItemsSource = Items = items; 12 } 13 14 // 次へボタン 15 private async void Next_Clicked(object sender, EventArgs e) 16 { 17 // 1つ以上が選択されていること。 18 if (!Items.Any(x => x.IsSelected)) 19 return; 20 21 // 選択されているものだけを渡して、ページ2へ遷移します。 22 await Navigation.PushAsync(new Page2(Items.Where(x => x.IsSelected))); 23 } 24}

Page2

Page2

  • ここも ListView です。個数の入力はとりあえず Entry にしました。
  • 注文確定ボタンが押されたら、何らかの処理をしたいのですが、とりあえず注文内容を DisplayAlert で表示します。SQLite については、すみませんが割愛します。その後、PopToRootAsync で一気に MainPage に戻ります。
  • ここでも画面左上の「←」で1つ前のページに戻ることができます。

XAML

1<ContentPage 2(略) 3 <StackLayout> 4 <ListView x:Name="ListView2"> 5 <ListView.ItemTemplate> 6 <DataTemplate> 7 <ViewCell> 8 <Grid> 9 <Label Grid.Row="0" Grid.Column="0" Text="{Binding Name}" /> 10 <Label Grid.Row="0" Grid.Column="1" Text="{Binding Price}" /> 11 <Entry Grid.Row="0" Grid.Column="2" Text="{Binding Count}" Keyboard="Numeric" /> 12 </Grid> 13 </ViewCell> 14 </DataTemplate> 15 </ListView.ItemTemplate> 16 </ListView> 17 <Button Text="注文確定" Clicked="Submit_Clicked" /> 18 </StackLayout> 19</ContentPage> 20``` 21 22```C# 23public partial class Page2 : ContentPage 24{ 25 // データ 26 public IEnumerable<Item> Items { get; set; } 27 28 public Page2(IEnumerable<Item> items) 29 { 30 InitializeComponent(); 31 32 // データを ListView に渡します。 33 ListView2.ItemsSource = Items = items; 34 } 35 36 private async void Submit_Clicked(object sender, EventArgs e) 37 { 38 // 個数がすべて入力されていること。 39 if (!Items.All(x => x.Count > 0)) 40 return; 41 42 var stringBuilder = new StringBuilder(); 43 foreach(var item in Items) 44 { 45 stringBuilder.Append($"{item.Name} × {item.Count} コ\n"); 46 } 47 await DisplayAlert("注文内容", stringBuilder.ToString(), "OK"); 48 49 // 最初に戻ります。 50 await Navigation.PopToRootAsync(); 51 } 52} 53``` 54 55以上となります。これ以外にも様々な実装があり得ると思います。

投稿2020/04/16 05:18

NakamuraYoichi

総合スコア374

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

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

GId

2020/04/16 06:10

アクセシビリティに一貫性がありません と言われます。 どうしたらよいでしょうか?
NakamuraYoichi

2020/04/16 06:19

Item クラスに public を付け忘れていませんか。あるいは他のどこかに public が抜けている。
GId

2020/04/16 06:23

消えました。 Itemクラスに付け忘れていたようです。 これで、今止まっている作ってい見たいモノを進められそうです。 回答本当にありがとうございます!!
guest

0

DisplayAlertは単純なテキスト以外を表示できません。
カスタムビューを実装しましょう。

投稿2020/04/15 13:55

tkanda

総合スコア2425

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問