Xamarinを使用した連絡先アプリケーションの構築 – 第3部
はじめに
前回の記事では、Xamarinを使用した連絡先アプリケーションの基本的な構成要素と、簡単なUIの作成方法を紹介しました。第3部では、アプリケーションに高度な機能を追加し、ユーザーが連絡先を管理できるようにする方法を解説します。このパートでは、データベースとの統合、連絡先の保存、表示、編集機能などを含みます。

1. 必要なパッケージのインストール
まず、アプリケーションに必要なNuGetパッケージをインストールします。これにより、データベース操作やユーザーインターフェースの改善が可能になります。
-
SQLite-net-pcl: SQLiteデータベースとの統合に使用します。ローカルデータベースで連絡先を保存するために必要です。
-
Xamarin.Essentials: デバイスの連絡先情報にアクセスするために使用します。これにより、ユーザーのデバイス上に保存されている連絡先を取得できます。
これらのパッケージは、NuGetパッケージマネージャーを使用してインストールできます。
bashInstall-Package SQLite-net-pcl Install-Package Xamarin.Essentials
2. SQLiteデータベースの設定
SQLiteは、軽量でモバイルアプリケーション向けに最適なデータベースです。アプリ内で連絡先情報を保存し、管理するためにSQLiteデータベースを設定します。
データベースクラスの作成
まず、SQLiteデータベースの操作を管理するためのクラスを作成します。このクラスでは、データベースの初期化、テーブルの作成、データの挿入、取得、更新、削除を行います。
csharpusing SQLite;
public class Contact
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
public string PhoneNumber { get; set; }
public string Email { get; set; }
}
public class DatabaseService
{
private SQLiteConnection _database;
public DatabaseService(string dbPath)
{
_database = new SQLiteConnection(dbPath);
_database.CreateTable();
}
public int SaveContact(Contact contact)
{
return _database.Insert(contact);
}
public List<Contact> GetContacts()
{
return _database.Table().ToList();
}
public int DeleteContact(int id)
{
return _database.Delete(id);
}
public int UpdateContact(Contact contact)
{
return _database.Update(contact);
}
}
データベースの初期化
次に、アプリケーションの起動時にデータベースを初期化します。この処理をApp.xaml.cs
に追加します。
csharppublic static DatabaseService Database;
public App()
{
InitializeComponent();
string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "contacts.db3");
Database = new DatabaseService(dbPath);
MainPage = new NavigationPage(new ContactListPage());
}
3. 連絡先情報の取得
Xamarin.Essentialsを使用して、デバイスの連絡先情報にアクセスします。このパートでは、ユーザーが自分の連絡先リストをアプリケーションにインポートできるようにします。
連絡先の取得
Xamarin.Essentialsを使って、デバイスの連絡先情報を取得します。この操作は非同期で行います。
csharpusing Xamarin.Essentials;
public async Task> GetDeviceContactsAsync()
{
var contacts = await Contacts.GetAllAsync();
List contactList = new List();
foreach (var contact in contacts)
{
contactList.Add(new Contact
{
Name = contact.DisplayName,
PhoneNumber = contact.Phones.Count > 0 ? contact.Phones[0].PhoneNumber : "",
Email = contact.Emails.Count > 0 ? contact.Emails[0].EmailAddress : ""
});
}
return contactList;
}
連絡先の表示
取得した連絡先情報をUIに表示するために、ListView
を使用します。以下のコードでは、取得した連絡先をリストに表示します。
csharppublic partial class ContactListPage : ContentPage
{
public ContactListPage()
{
InitializeComponent();
LoadContacts();
}
private async void LoadContacts()
{
var contacts = await GetDeviceContactsAsync();
ContactsListView.ItemsSource = contacts;
}
}
XAMLでのリストビュー設定
ContactListPage.xaml
で、ListView
を設定して連絡先情報を表示します。
xml"1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ContactApp.ContactListPage">
<ListView x:Name="ContactsListView">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding Name}" Detail="{Binding PhoneNumber}" />
DataTemplate>
ListView.ItemTemplate>
ListView>
ContentPage>
4. 連絡先の追加、編集、削除
ユーザーが連絡先を追加、編集、削除できるように、各機能を実装します。
連絡先の追加
連絡先を追加するために、ユーザーが名前と電話番号を入力できるフォームを作成します。
csharppublic partial class AddContactPage : ContentPage
{
public AddContactPage()
{
InitializeComponent();
}
private async void OnSaveButtonClicked(object sender, EventArgs e)
{
var contact = new Contact
{
Name = NameEntry.Text,
PhoneNumber = PhoneNumberEntry.Text,
Email = EmailEntry.Text
};
App.Database.SaveContact(contact);
await Navigation.PopAsync();
}
}
AddContactPage.xaml
では、名前と電話番号を入力するためのエントリーフィールドを設定します。
xml"1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ContactApp.AddContactPage">
<StackLayout Padding="10">
<Entry x:Name="NameEntry" Placeholder="Name" />
<Entry x:Name="PhoneNumberEntry" Placeholder="Phone Number" />
<Entry x:Name="EmailEntry" Placeholder="Email" />
<Button Text="Save" Clicked="OnSaveButtonClicked" />
StackLayout>
ContentPage>
連絡先の削除
ユーザーが連絡先を削除できるように、SwipeDelete
アクションを使用します。
csharpprivate async void OnDeleteContact(object sender, EventArgs e)
{
var contact = (Contact)((MenuItem)sender).BindingContext;
App.Database.DeleteContact(contact.Id);
LoadContacts();
}
XAMLでは、リストアイテムにスワイプアクションを追加します。
xml<ListView x:Name="ContactsListView" ItemSelected="OnItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text="{Binding Name}" />
<Label Text="{Binding PhoneNumber}" />
StackLayout>
<ViewCell.ContextActions>
<MenuItem Text="Delete" BackgroundColor="Red" Clicked="OnDeleteContact"/>
ViewCell.ContextActions>
ViewCell>
DataTemplate>
ListView.ItemTemplate>
ListView>
5. まとめ
今回は、Xamarinを使用して連絡先アプリケーションに高度な機能を追加しました。SQLiteを使用したデータ保存、Xamarin.Essentialsを使用したデバイスの連絡先の取得、連絡先の追加、編集、削除機能を実装しました。これらの機能を組み合わせることで、ユーザーは自分の連絡先を簡単に管理できるアプリケーションを作成することができます。
次回の記事では、さらなるカスタマイズやパフォーマンス向上のためのテクニックについて詳しく解説します。