私は、産業環境でハンドヘルド インターフェイスとして使用されるアプリケーションを開発しており、職場で配布および事前構成されています。タブレットが「行方不明になる」という誘惑が少なくなるように、アプリケーションをホームランチャーとして実行するように取り組んでいます。
バックグラウンド
アプリケーションをランチャーにするために、マニフェストに次のものがあります。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
(必要に応じてマニフェストをさらに投稿できます)
私のアプリケーションの構造は次のとおりです。
- USB_Stuff はアクティビティを拡張します
- メインは USB_Stuff を拡張します
- UI は Fragment を拡張します
- SQLiteHelper は SQLiteOpenHelper を拡張します
「メイン」は、すべてのフラグメント通信とトランザクションを処理します。「メイン」は、<activity>
name 属性でマニフェストに登録されるものでもあります。
またBOOT_COMPLETED
、アプリケーションを起動するマニフェスト内にレシーバーがあります。
問題
解決済み Eclipse からプログラムを実行して操作すると、すべてがうまく機能するようになりました。ただし、デバイスを再起動すると (Asus Nexus 7 (4.2.2) と Samsung Galaxy Tab 2 7.0 (4.1.1) の両方でテスト済み)、最初の画面で起動しListView
ます。
リストからアイテムを選択すると、リストの代わりに 3 つのボタンを含む次のフラグメントに移動します。
解決済み上の 2 番目の画像の赤いボックス内をクリックすると、「onClickListener」(?) が非アクティブになると赤いスペースに触れた後、最大 1 回まで別のアイテムを選択できます。ただし、表示されている 3 つのボタンのいずれかをクリックすると、アプリケーションはクリックして前の画面に移動するのではなく、そのメソッドを実行します。この動作は複数の画面で続き、アプリケーションが に到達すると停止します。ListView
onClick
TableLayouts
関連していると思われるもう 1 つの問題は、バック スタックを特定のポイントにポップするはずの戻るボタンと後でキャンセルするボタンがまったく機能しないか、間違ったポップ位置を実行することです。
更新:以下のソリューションを実装した後、最初の 2 秒 (約) 以内にアプリケーションを使用し始めた場合を除いて、ほとんどの問題を解決しました。
これまでにわかったこと...
ホームランチャーをコメントアウトしintent-filter
、フィルターを使用しBOOT_COMPLETED
てアプリを起動すると、すべてが再び正常に機能します。
また、ログ ステートメントを追加して、プログラム全体のバック スタック エントリ カウントを表示し、アプリケーションが正常に実行されている場合とそうでない場合にアプリケーションを介してまったく同じ経路をたどり、数値が一貫していても、赤いボックスをクリックすると、アプリはすべきではないバックスタックにフラグメントを追加します。これは、バック スタック上の余分なアイテムがビューをリークしている可能性があるため、問題ではないと私は信じています。
解決済みの 編集:match_parent
幅と高さの両方にある 2 番目のフラグメントに何もしないボタンを追加し、前のフラグメントの をクリックしようとするとListView
、機能しませんでした。背景が「クリック可能」で、前のフラグメントが「背景/壁紙」(?) として設定されているようです。
質問
回答 1) 再起動後にフラグメントからフラグメントへの「レイアウト リーク」が発生する原因は何ですか?
一部回答済み2) 再起動後に戻る/キャンセル ボタン ( popBackStack(...)
) が正しく機能しない原因は何ですか?
ソリューションを促進するために、要求に応じて利用可能な追加のコード。