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

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

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

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

C#

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

Android

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

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

Q&A

解決済

1回答

4737閲覧

Xamarin Forms ListViewのViewCell内にTebleViewを置いたら、Entry(Editer)にフォーカスが当たらない

tukusa

総合スコア44

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

C#

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

Android

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

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

0グッド

1クリップ

投稿2016/12/21 10:50

おなじみのXamarinプラットフォーム問題です。

ListViewのCellにTebleViewを設置し、そのViewCell中にEntryを置きました。

すると、iOSでは問題なく動くのですが、AndroidはタップしてもEntryにフォーカスが当たってくれません。

一度ListViewのEntryにフォーカスを当てた状態で、TableView内のEntryをタップすると動作するのですが、
スクロールや、Cellの外枠を触れてEntryからフォーカスを失うと、再度TableView内のEntryをタップしてもフォーカスされません。

解決方法をご存知の方、助けていただけませんでしょうか。

ListTableTestPage.xaml

<?xml version="1.0" encoding="UTF-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="ListViewTest.ListTableTestPage"> <StackLayout Padding="20"> <ListView HasUnevenRows="true" ItemsSource="{Binding TestList}"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <StackLayout Padding="20" BackgroundColor="Yellow"> <Label Text="ListView"/> <Entry BackgroundColor="Fuchsia" /> <TableView HasUnevenRows="true" BackgroundColor="Red"> <TableSection Title="TableView"> <ViewCell> <StackLayout > <Label Text="{Binding Text}" /> <Entry Text="{Binding Entry}" BackgroundColor="Green" /> <Editor Text="{Binding Editor}" BackgroundColor="Gray" /> </StackLayout> </ViewCell> </TableSection> </TableView> </StackLayout> </ViewCell> </DataTemplate> </ListView.ItemTemplate> </ListView > </StackLayout> </ContentPage>

ListTableTestPage.xaml.cs

using Xamarin.Forms; namespace ListViewTest { public partial class ListTableTestPage : ContentPage { public ListTableTestPage() { InitializeComponent(); BindingContext = new ListTableTestViewModel(); } } }

ListTableTestViewModel.cs

using System; using System.Collections.ObjectModel; using Prism.Mvvm; namespace ListViewTest { public class ListTableTestViewModel: BindableBase { public ObservableCollection<ListItem> TestList { get; } = new ObservableCollection<ListItem>(); public ListTableTestViewModel() { for (int i = 0; i < 3; i++) { TestList.Add(new ListItem()); } } public class ListItem : BindableBase { public string Text { get; set; } = "入力してね"; public string Entry { get; set; } = "Entry"; public string Editor { get; set; } = "Editor"; } } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。

以下の質問の関連という前提で回答します。
https://teratail.com/questions/58147

ListViewの中にListViewやTableViewを配置する場合ですが、
もし電話帳のようにいくつかグループ化されたリストを作りたいだけであれば、
Xamarin.FormsのListView標準でGroupHeaderTemplateとItemTemplateの2つのテンプレートが設定できるので無理やりListの中にListを入れなくてもある程度やりたいことは実現できないでしょうか。

xml

1<?xml version="1.0" encoding="utf-8" ?> 2<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 3 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 4 x:Class="ListViewTest.ListTableTestPage2"> 5 <ContentPage.Content> 6 <ListView ItemsSource="{Binding Items}" 7 HasUnevenRows="True" 8 IsGroupingEnabled="True"> 9 <ListView.GroupHeaderTemplate> 10 <DataTemplate> 11 <ViewCell> 12 <ViewCell.View> 13 <StackLayout Orientation="Vertical" BackgroundColor="Yellow"> 14 <Label Text="ListView" /> 15 <Entry BackgroundColor="Fuchsia" /> 16 </StackLayout> 17 </ViewCell.View> 18 </ViewCell> 19 </DataTemplate> 20 </ListView.GroupHeaderTemplate> 21 <ListView.ItemTemplate> 22 <DataTemplate> 23 <ViewCell> 24 <StackLayout Padding="20" Orientation="Vertical" BackgroundColor="Red"> 25 <Label Text="{Binding Text}" /> 26 <Entry Text="{Binding Entry}" BackgroundColor="Green" /> 27 <Editor Text="{Binding Editor}" BackgroundColor="Gray" /> 28 </StackLayout> 29 </ViewCell> 30 </DataTemplate> 31 </ListView.ItemTemplate> 32 </ListView > 33 </ContentPage.Content> 34</ContentPage>

csharp

1public partial class ListTableTestPage2 : ContentPage 2{ 3 public ListTableTestPage2() 4 { 5 InitializeComponent(); 6 this.BindingContext = new ListTableTestViewModel(); 7 } 8} 9 10public class ListTableTestViewModel : BindableBase 11{ 12 public ObservableCollection<GroupedViewModel> Items { get; set; } 13 14 public ListTableTestViewModel() 15 { 16 Items = new ObservableCollection<GroupedViewModel>(); 17 var group1 = new GroupedViewModel { HeaderName1 = "A", HeaderName2 = "1" }; 18 group1.Add(new ListItemViewModel { Text = "A001", Entry = "A011", Editor = "A111" }); 19 group1.Add(new ListItemViewModel { Text = "A002", Entry = "A012", Editor = "A112" }); 20 group1.Add(new ListItemViewModel { Text = "A003", Entry = "A013", Editor = "A113" }); 21 22 var group2 = new GroupedViewModel { HeaderName1 = "B", HeaderName2 = "1" }; 23 group2.Add(new ListItemViewModel { Text = "B001", Entry = "B011", Editor = "B111" }); 24 group2.Add(new ListItemViewModel { Text = "B002", Entry = "B012", Editor = "B112" }); 25 26 var group3 = new GroupedViewModel { HeaderName1 = "C", HeaderName2 = "1" }; 27 group3.Add(new ListItemViewModel { Text = "C001", Entry = "C011", Editor = "C111" }); 28 group3.Add(new ListItemViewModel { Text = "C002", Entry = "C012", Editor = "C112" }); 29 group3.Add(new ListItemViewModel { Text = "C003", Entry = "C013", Editor = "C113" }); 30 group3.Add(new ListItemViewModel { Text = "C004", Entry = "C014", Editor = "C114" }); 31 32 Items.Add(group1); 33 Items.Add(group2); 34 Items.Add(group3); 35 } 36} 37 38public class ListItemViewModel : BindableBase 39{ 40 public string Text { get; set; } 41 public string Entry { get; set; } 42 public string Editor { get; set; } 43 44} 45 46public class GroupedViewModel : ObservableCollection<ListItemViewModel> 47{ 48 public string HeaderName1 { get; set; } 49 public string HeaderName2 { get; set; } 50}

これをやったうえでEntryにフォーカスが当たらないとしたら困ったものですが…

投稿2016/12/21 16:09

Tak1wa

総合スコア4791

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

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

tukusa

2016/12/22 01:22

回答ありがとうございます。 グループではヘッダーのカスタムが難しいと勝手に思い込んで、リストビューにリストビューやテーブルビューを重ねるという強引な手法を取っていました。 自分のやりたかったことはヘッダーテンプレート等で解決しそうです。 一度こちらでやってみて、もしダメでまた同じことになるようであれば、 新しく質問をさせていただこうと思います。 こちらの質問はこれで解決ということで締めたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問