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

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

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

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

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

解決済

1回答

795閲覧

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

takapi_cs

総合スコア349

C#

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

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 の両方の開発を行うことができます。

0グッド

0クリップ

投稿2019/08/20 08:02

前提・実現したいこと

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

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

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

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

該当のソースコード

C#

1public class MainPageViewModel : ViewModelBase 2{ 3 /// <summary> 4 /// QRコード読み取り画面へ移動コマンド 5 /// </summary> 6 public AsyncReactiveCommand GotoQRScannerPageCommand { get; } = new AsyncReactiveCommand(); 7 8 /// <summary> 9 /// 製品情報画面へ移動コマンド 10 /// </summary> 11 public AsyncReactiveCommand GotoAboutProductPageCommand { get; } = new AsyncReactiveCommand(); 12 13 public MainPageViewModel(INavigationService navigationService) 14 : base(navigationService) 15 { 16 ////////////////////////////////////////////////////////////////// 17 // QRコード読み取り画面へ移動コマンド 18 GotoQRScannerPageCommand.Subscribe(async () => 19 { 20 try 21 { 22 await this.NavigationService.NavigateAsync("QRScannerPage"); 23 } 24 catch (Exception ex) 25 { 26 await Application.Current.MainPage.DisplayAlert(AppInfo.Name, ex.Message, "OK"); 27 } 28 }); 29 30 ////////////////////////////////////////////////////////////////// 31 // 製品情報画面へ移動コマンド 32 GotoAboutProductPageCommand.Subscribe(async () => 33 { 34 try 35 { 36 await this.NavigationService.NavigateAsync("AboutProductPage"); 37 } 38 catch (Exception ex) 39 { 40 await Application.Current.MainPage.DisplayAlert(AppInfo.Name, ex.Message, "OK"); 41 } 42 }); 43 44 // (略) 45 46 } 47}

XAML

1<!-- MainPage.xaml --> 2<!-- ツールバーアイテム実装箇所 --> 3<ContentPage.ToolbarItems> 4 <ToolbarItem Icon="QRCodeScan.png" 5 Text="QR読み取り" 6 Command="{Binding GotoQRScannerPageCommand}" /> 7 <ToolbarItem Icon="Info.png" 8 Text="製品情報" 9 Command="{Binding GotoAboutProductPageCommand}" /> 10</ContentPage.ToolbarItems>

XAML

1<!-- AboutProductPage.xaml --> 2<?xml version="1.0" encoding="utf-8" ?> 3<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 4 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 5 xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms" 6 prism:ViewModelLocator.AutowireViewModel="True" 7 x:Class="MyApp.Views.AboutProductPage" 8 x:Name="aboutProductPage" 9 Title="{Binding Title}"> 10 11 <!-- 設定/その他情報画面 --> 12 <StackLayout HorizontalOptions="Center" VerticalOptions="StartAndExpand"> 13 <TableView Intent="Form" HasUnevenRows="True"> 14 <TableView.Root> 15 <TableRoot> 16 <TableSection Title="製品情報"> 17 <ViewCell> 18 <StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand" Padding="15,10,15,10"> 19 <Label Text="アプリ名" VerticalTextAlignment="Center" HorizontalOptions="Start" /> 20 <Label Text="{Binding AboutProduct.ProductName}" VerticalTextAlignment="Center" HorizontalOptions="EndAndExpand" /> 21 </StackLayout> 22 </ViewCell> 23 <ViewCell> 24 <StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand" Padding="15,10,15,10"> 25 <Label Text="バージョン情報" VerticalTextAlignment="Center" HorizontalOptions="Start" /> 26 <Label Text="{Binding AboutProduct.Version}" VerticalTextAlignment="Center" HorizontalOptions="EndAndExpand" /> 27 </StackLayout> 28 </ViewCell> 29 <ViewCell> 30 <StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand" Padding="15,10,15,10"> 31 <Label Text="作成者" VerticalTextAlignment="Center" HorizontalOptions="Start" /> 32 <Label Text="{Binding AboutProduct.CompanyName}" VerticalTextAlignment="Center" HorizontalOptions="EndAndExpand" /> 33 </StackLayout> 34 </ViewCell> 35 </TableSection> 36 37 <TableSection Title="その他"> 38 <TextCell Text="ライセンス情報" TextColor="DimGray" Command="{Binding GotoLicensePageCommand}" /> 39 </TableSection> 40 41 </TableRoot> 42 </TableView.Root> 43 </TableView> 44 </StackLayout> 45 46</ContentPage>

試したこと

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

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

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

C#

1System.Diagnostics.Trace.WriteLine("hogehoge"); 2await this.NavigationService.NavigateAsync("AboutProductPage"); 3System.Diagnostics.Trace.WriteLine("fugafuga");

log

108-20 16:42:16.361 I/mono-stdout(19756): hogehoge //←初回タップ 208-20 16:42:16.399 I/mono-stdout(19756): fugafuga 308-20 16:42:16.616 W/DeviceStorageMonitorService( 1717): updateBroadcasts(/data) oldLevel:0, newLevel:0, seq:1 408-20 16:42:16.617 W/DeviceStorageMonitorService( 1717): updateBroadcasts_filenode(/data) fn_oldLevel:0, fn_newLevel:0, seq:1 508-20 16:42:17.202 D/WifiPermissionsUtil( 1717): canAccessScanResults: pkgName = android, uid = 1000 608-20 16:42:17.977 D/InputReader( 1717): Input event(10): value=1 when=20632.500730 708-20 16:42:17.977 D/InputReader( 1717): Input event(10): value=1 when=20632.500730 808-20 16:42:17.977 I/InputReader( 1717): Touch event's action is 0x0 (deviceType=0) [pCnt=1, s=0.1686 ] when=20632.500730 908-20 16:42:17.979 I/InputDispatcher( 1717): Delivering touch to (2148): action: 0x4, displayId: 0, '5087d01', toolType: 1 1008-20 16:42:17.979 I/InputDispatcher( 1717): Delivering touch to (2148): action: 0x4, displayId: 0, '8a37d7 ', toolType: 1 1108-20 16:42:17.979 I/clp-JNI ( 1717): Add pinfo) 0 1208-20 16:42:17.979 I/InputDispatcher( 1717): Delivering touch to (19756): action: 0x0, displayId: 0, 'ffb8c91', toolType: 1 1308-20 16:42:17.979 D/ViewRootImpl@f762a6c[MainActivity](19756): ViewPostIme pointer 0 1408-20 16:42:18.063 D/InputReader( 1717): Input event(10): value=0 when=20632.586287 1508-20 16:42:18.063 D/InputReader( 1717): Input event(10): value=0 when=20632.586287 1608-20 16:42:18.063 I/InputReader( 1717): Touch event's action is 0x1 (deviceType=0) [pCnt=1, s=] when=20632.586287 1708-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 1808-20 16:42:18.063 I/clp-JNI ( 1717): Add pinfo) 1 1908-20 16:42:18.063 I/InputDispatcher( 1717): Delivering touch to (19756): action: 0x1, displayId: 0, 'ffb8c91', toolType: 1 2008-20 16:42:18.065 D/ViewRootImpl@f762a6c[MainActivity](19756): ViewPostIme pointer 1 2108-20 16:42:18.076 I/mono-stdout(19756): hogehoge //←2回目タップ 2208-20 16:42:18.082 I/mono-stdout(19756): fugafuga

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

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

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

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

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

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

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

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

guest

回答1

0

自己解決

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

C#

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

投稿2019/08/21 02:45

takapi_cs

総合スコア349

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問