ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
フォーラム一覧   -   トピック一覧
   バグ投稿 及び Voteの募集
     State変更後にMobile端末のメニューボタンが効かない場合がある
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
jetcity
投稿日時: 2012-12-25 10:22
一見さん
登録日: 2012-12-18
居住地: 札幌
投稿: 3
State変更後にMobile端末のメニューボタンが効かない場合がある
currentStateを変更直後、モバイル端末のメニューボタンを押してもオプションメニューが表示されない場合があるようです。

現象からは、includeIn指定したGroup内のボタン等のコンポーネントのイベントから、そのGroupが含まれなくなるステートにcurrentStateを変更した場合に起きるのでは?と思います。

例えば以下のViewの例では、Groupの子要素のボタン(btnBack1)からbackState関数を呼び出し、State2→State1にステートを変更した場合に再現します(シミュレータでも再現します)。
Viewの子要素のボタン(btnBack2)から同じ関数でステートを変更しても再現しません。


<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
		xmlns:s="library://ns.adobe.com/flex/spark"
		title="Sample">
	<fx:Script>
		<![CDATA[
			protected function changeState():void
			{
				// ステートを変更
				currentState = "State2";
			}
			
			protected function backState():void
			{
				// ステートを戻す
				currentState = "State1";
				// ↓このコメントアウトを取ると一応解決する
				//	this.setFocus();
			}
		]]>
	</fx:Script>
	
	<s:states>
		<s:State name="State1"/>
		<s:State name="State2"/>
	</s:states>
	
	<!-- State1の表示 -->
	<s:Button label="Change!" click="changeState()"
			  horizontalCenter="0"
			  verticalCenter="0"
			  includeIn="State1"/>
	
	<!-- State2の表示その1 ※再現する方 -->
	<s:Group width="200" height="100"
			 horizontalCenter="0"
			 verticalCenter="-50"
			 includeIn="State2">
		<s:Rect width="100%" height="100%">
			<s:stroke>
				<s:SolidColorStroke color="0x00ff00" />
			</s:stroke>
		</s:Rect>
		<s:Button id="btnBack1" label="Back1"
				  horizontalCenter="0"
				  verticalCenter="0"
				  click="backState()"/>
	</s:Group>
	<!-- State2の表示その2 ※再現しない方 -->
	<s:Button id="btnBack2" label="Back2"
		      horizontalCenter="0"
			  verticalCenter="50"
			  click="backState()"
			  includeIn="State2"/>
	
	<s:viewMenuItems>
		<s:ViewMenuItem label="てすと"/>
	</s:viewMenuItems>
</s:View>


State変更後にthis.setFocus()を呼び出してみると一応問題は解決します。(コメントアウトの部分)

私のFlex経験がまだ浅いのでバグとして報告してよいものかちょっと判断つきかねるのですが、「ん?なんで??」と思ったポイントなので投稿させて頂きました。

※FlashBuilder4.6と4.7で確認
jetcity
投稿日時: 2013-1-11 14:00
一見さん
登録日: 2012-12-18
居住地: 札幌
投稿: 3
Re: State変更後にMobile端末のメニューボタンが効かない場合がある
自己レスです。

Nexsus7などの最近のAndroidタブレット端末ではそもそもハードウェアキーとしてMenuボタンがありません。(※)
Android3.x以降は、Menuボタンに依存した実装をすること自体、Googleが推奨していないようです。

よって、上記の現象が仮に不具合だったとしても、アプリがAndroid4以降を意識した作りとなっていれば問題になることはなさそうですね。

※ハードウェアキーにMenuがないAndroid端末でも、manifestでtargetSdkVersionをVersion3系より前に指定することでソフトウェアキーの右端にメニューキーが表示されるようになります。が、これは暫定的な措置とのこと。

例)XXX-app.xmlの下の方

<android>
  <colorDepth>16bit</colorDepth>
  <manifestAdditions><![CDATA[
     <manifest android:installLocation="auto">
       <!-- sdkVesion=10は2.3.x(2.3.3以降) -->
       <uses-sdk android:targetSdkVersion="10" />
  ・・・


<参考>
http://www.itmedia.co.jp/news/articles/1201/27/news059.html

---- 追記(2013/01/18) ----
Menuボタンに限らず、戻るボタンでも同様の問題がありました。
ハードウェアキーの戻るボタンを押したときに、戻り先がviewStack上の前の画面ではなくAndroid端末のHOME画面などになるときがたまにあるなー???と思っていたのですが、あるGroup内のボタンからそのGroupを含まなくなる状態にステートを変更後、画面上のどこにも触らずに戻るキーを押すと、HOME画面などアプリ起動前に表示していた画面に戻り、自アプリがバックグラウンドになってしまいます。

includeIn定義により特定のStateでのみ含まれるGroup内のコンポーネントからStateを変更するような必要がある場合、state変更後に明示的にviewにsetFocusした方がよさそうです。


スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を