Xamarin.FormsでAndroidのRelease版で特定のツールバーアイテムが反応しなくなる

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 142

takapi_cs

score 66

前提・実現したいこと

Xamarin.Formsでアプリを開発しています。
Androidでツールバーアイテムのタップをして動作確認を行っていたところ、
Debug版では問題なかった画面遷移が、Release版では反応しない箇所が現れました。

発生している問題・エラーメッセージ

特定のツールバーアイテムをタップしても画面遷移しない。
アイコンをロングタップすると設定してあるテキストが表示されるので、タップ自体はできているようです。
下記は反応しない右側のアイコン(製品情報アイコン)をロングタップしたときの画像です。
ちなみに左側のQRコードのアイコンは問題なく反応して画面遷移します。

ロングタップしたときの画像

該当のソースコード

public class MainPageViewModel : ViewModelBase
{
    /// <summary>
    /// QRコード読み取り画面へ移動コマンド
    /// </summary>
    public AsyncReactiveCommand GotoQRScannerPageCommand { get; } = new AsyncReactiveCommand();

    /// <summary>
    /// 製品情報画面へ移動コマンド
    /// </summary>
    public AsyncReactiveCommand GotoAboutProductPageCommand { get; } = new AsyncReactiveCommand();

    public MainPageViewModel(INavigationService navigationService)
        : base(navigationService)
    {
        //////////////////////////////////////////////////////////////////
        // QRコード読み取り画面へ移動コマンド
        GotoQRScannerPageCommand.Subscribe(async () =>
        {
            try
            {
                await this.NavigationService.NavigateAsync("QRScannerPage");
            }
            catch (Exception ex)
            {
                await Application.Current.MainPage.DisplayAlert(AppInfo.Name, ex.Message, "OK");
            }
        });

        //////////////////////////////////////////////////////////////////
        // 製品情報画面へ移動コマンド
        GotoAboutProductPageCommand.Subscribe(async () =>
        {
            try
            {
                await this.NavigationService.NavigateAsync("AboutProductPage");
            }
            catch (Exception ex)
            {
                await Application.Current.MainPage.DisplayAlert(AppInfo.Name, ex.Message, "OK");
            }
        });

        // (略)

    }
}
<!-- MainPage.xaml -->
<!-- ツールバーアイテム実装箇所 -->
<ContentPage.ToolbarItems>
    <ToolbarItem Icon="QRCodeScan.png"
                 Text="QR読み取り"
                 Command="{Binding GotoQRScannerPageCommand}" />
    <ToolbarItem Icon="Info.png"
                 Text="製品情報"
                 Command="{Binding GotoAboutProductPageCommand}" />
</ContentPage.ToolbarItems>
<!-- AboutProductPage.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"
             xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
             prism:ViewModelLocator.AutowireViewModel="True"
             x:Class="MyApp.Views.AboutProductPage"
             x:Name="aboutProductPage"
             Title="{Binding Title}">

    <!-- 設定/その他情報画面 -->
    <StackLayout HorizontalOptions="Center" VerticalOptions="StartAndExpand">
        <TableView Intent="Form" HasUnevenRows="True">
            <TableView.Root>
                <TableRoot>
                    <TableSection Title="製品情報">
                        <ViewCell>
                            <StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand" Padding="15,10,15,10">
                                <Label Text="アプリ名" VerticalTextAlignment="Center" HorizontalOptions="Start" />
                                <Label Text="{Binding AboutProduct.ProductName}" VerticalTextAlignment="Center" HorizontalOptions="EndAndExpand" />
                            </StackLayout>
                        </ViewCell>
                        <ViewCell>
                            <StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand" Padding="15,10,15,10">
                                <Label Text="バージョン情報" VerticalTextAlignment="Center" HorizontalOptions="Start" />
                                <Label Text="{Binding AboutProduct.Version}" VerticalTextAlignment="Center" HorizontalOptions="EndAndExpand" />
                            </StackLayout>
                        </ViewCell>
                        <ViewCell>
                            <StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand" Padding="15,10,15,10">
                                <Label Text="作成者" VerticalTextAlignment="Center" HorizontalOptions="Start" />
                                <Label Text="{Binding AboutProduct.CompanyName}" VerticalTextAlignment="Center" HorizontalOptions="EndAndExpand" />
                            </StackLayout>
                        </ViewCell>
                    </TableSection>

                    <TableSection Title="その他">
                        <TextCell Text="ライセンス情報" TextColor="DimGray" Command="{Binding GotoLicensePageCommand}"  />
                    </TableSection>

                </TableRoot>
            </TableView.Root>
        </TableView>
    </StackLayout>

</ContentPage>

試したこと

下記を試しましたが、製品情報アイコンはタップしても画面遷移しませんでした。

  • クリーンしてビルド、bin/obj削除してビルド
  • コマンド名の確認
  • ToolbarItems内を入れ替え→位置を変えても製品情報アイコンが反応しない状態
  • ToolbarItems内のPriorityを設定
  • [プロパティ]-[Androidオプション]-[リンク中]を[SDKアセンブリのみ]から[なし]に変更
  • Xamarin.Formsを4.1.0.618606から最新(4.1.0.673156)にアップデート

また、下記の画面遷移処理が行われる直前にログ出力をはさみ、実機で何度かタップして確認したところ、ログ出力されたので、そのコードを通ってはいるようです。

System.Diagnostics.Trace.WriteLine("hogehoge");
await this.NavigationService.NavigateAsync("AboutProductPage");
System.Diagnostics.Trace.WriteLine("fugafuga");
08-20 16:42:16.361 I/mono-stdout(19756): hogehoge    //←初回タップ
08-20 16:42:16.399 I/mono-stdout(19756): fugafuga
08-20 16:42:16.616 W/DeviceStorageMonitorService( 1717): updateBroadcasts(/data) oldLevel:0, newLevel:0, seq:1
08-20 16:42:16.617 W/DeviceStorageMonitorService( 1717): updateBroadcasts_filenode(/data) fn_oldLevel:0, fn_newLevel:0, seq:1
08-20 16:42:17.202 D/WifiPermissionsUtil( 1717): canAccessScanResults: pkgName = android, uid = 1000
08-20 16:42:17.977 D/InputReader( 1717): Input event(10): value=1 when=20632.500730
08-20 16:42:17.977 D/InputReader( 1717): Input event(10): value=1 when=20632.500730
08-20 16:42:17.977 I/InputReader( 1717): Touch event's action is 0x0 (deviceType=0) [pCnt=1, s=0.1686 ] when=20632.500730
08-20 16:42:17.979 I/InputDispatcher( 1717): Delivering touch to (2148): action: 0x4, displayId: 0, '5087d01', toolType: 1
08-20 16:42:17.979 I/InputDispatcher( 1717): Delivering touch to (2148): action: 0x4, displayId: 0, '8a37d7 ', toolType: 1
08-20 16:42:17.979 I/clp-JNI ( 1717): Add pinfo) 0
08-20 16:42:17.979 I/InputDispatcher( 1717): Delivering touch to (19756): action: 0x0, displayId: 0, 'ffb8c91', toolType: 1
08-20 16:42:17.979 D/ViewRootImpl@f762a6c[MainActivity](19756): ViewPostIme pointer 0
08-20 16:42:18.063 D/InputReader( 1717): Input event(10): value=0 when=20632.586287
08-20 16:42:18.063 D/InputReader( 1717): Input event(10): value=0 when=20632.586287
08-20 16:42:18.063 I/InputReader( 1717): Touch event's action is 0x1 (deviceType=0) [pCnt=1, s=] when=20632.586287
08-20 16:42:18.063 I/clp-JNI ( 1717): Add pinfo) ffb8c91 com.company.MyApp.Android/md5f05896d5b5aeca1d5ecf8e8d4b1039f0.MainActivity (server) : AppWindowToken{e1be4d3 token=Token{f019ec2 ActivityRecord{b095f0d u0 com.company.MyApp.Android/md5f05896d5b5aeca1d5ecf8e8d4b1039f0.MainActivity t107}}} : 19756 : 10228 : 1
08-20 16:42:18.063 I/clp-JNI ( 1717): Add pinfo) 1
08-20 16:42:18.063 I/InputDispatcher( 1717): Delivering touch to (19756): action: 0x1, displayId: 0, 'ffb8c91', toolType: 1
08-20 16:42:18.065 D/ViewRootImpl@f762a6c[MainActivity](19756): ViewPostIme pointer 1
08-20 16:42:18.076 I/mono-stdout(19756): hogehoge    //←2回目タップ
08-20 16:42:18.082 I/mono-stdout(19756): fugafuga

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

開発環境
Visual Studio 2019(16.2.2)
Xamarin.Forms 4.1.0.673156

何か情報をお持ちの方がいましたらご回答よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

質問内容から漏れていた実装箇所ですが、
下記のバージョン情報を取得する処理で、正しく処理できてないようでした。

var verInfo = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location);

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる