こんにちは。エクセルソフトの田淵です。
Xamarin.Forms で、ListView を絞り込み表示とかしたい場合は SearchBar が便利です。
今回も Adam さんの Xamarin.Forms SearchBar Recipe を活用させていただきました。
2015/7/31 時点の最新版 Xamarin.Forms 1.4.4.6392 での情報です。
動作イメージ
サンプル
使い方
例えば ListView で使用する場合は、カスタムの ListView に検索用のメソッドを用意し、SearchBar の TextChanged
や SearchButtonPressed
で検索メソッドを呼び出します。
ContentPage はこんな感じで、
public class SearchBarPageCS : ContentPage { MyListView mylist; SearchBar searchbar; public SearchBarPageCS() { mylist = new MyListView(); searchbar = new SearchBar { Placeholder = "Search", }; searchbar.TextChanged += (sender, e) => mylist.SearchFilter(e.NewTextValue); searchbar.SearchButtonPressed += (sender, e) => mylist.SearchFilter(searchbar.Text); Content = new StackLayout { Padding = new Thickness(0, Device.OnPlatform(20, 0, 0), 0, 0), Children = { searchbar, mylist, } }; } }
ListView はこんな感じです。日本語のひらがなカタカナを無視するには Caltureなんちゃらを使用してゴニョゴニョするんでしょうか?半角英数字/全角英数字 にも対応したいですね!
public class MyListView : ListView { List<string> listData; public MyListView() { string[] str = { "test1", "TEST2", "abc", "XYZ", "abc", "xyz", "あいうえお", "カキクケコ", "表示性能" }; listData = new List<string>(str); this.ItemsSource = listData; } /// <summary> /// MyListView を引数でフィルターするメソッドです。 /// </summary> /// <param name="filter">string</param> public void SearchFilter(string filter) { this.BeginRefresh(); if (string.IsNullOrWhiteSpace(filter)) { this.ItemsSource = listData; } else { // 英語の大文字小文字対策のみですが、日本語の全角半角対策も入れるべきだと思います。 // 良いメソッドをご存知の方はご紹介ください>< this.ItemsSource = listData .Where(x => x.ToLower().Contains(filter.ToLower())); } this.EndRefresh(); } }
Android が動きません…
日本語の入力が出来ないので Xamarin に確認したところ、プロジェクトのプロパティで CJK を設定すれば大丈夫だよ!と回答を得ました。が、解決していません。
DebugLog に W/IInputConnectionWrapper( 3587): endBatchEdit on inactive InputConnection
と入力のコネクションが非アクティブになりましてん。と出ているのも気になるところです。こちらは引き続き調査します。
Xamarin 気になった方は
いかがでしょうか。Android はともかく、こんな簡単なコードでモバイルアプリが作れちゃう Xamarin.Forms お勧めです♪
是非 ダウンロード(直接) / ダウンロード(弊社経由) して触ってみてください。 学習用リソース や JXUG リンクページ に参考資料を纏めてますので併せてどうぞ。
Xamarin の情報が欲しい方はこのブログも購読いただいたりすると嬉しいです。
以上です。