0


私はこのようなアプリ構造を持っています:
アプリの構造
背景:親アクティビティ #1 は、タブ ホスト、タブ ウィジェットを保持しているだけで、3 つのタブ(tab1、tab2、tab3 アクティビティ) に
コンテンツを設定するように 3 つのタブを設定しています。activities

更新: 親アクティビティ #1 の onTabChangedListener 内で検証メソッドを呼び出そうとしましたが、Null Pointer Exception が発生しました。それをどこにもたどることはできませんでした。競合するコードをコメント/削除しましたが、まだボトルネックが発生していません。StackTrace (PasteBin リンク)。親アクティビティ #1タブ #1 アクティビティのコード



問題:
ユーザーが個々のタブ アクティビティの onTabChanged イベントでフォーム フィールドに入力したデータを検証したいのですが、複数の を設定できませんsetOnTabChangedListener
ここで何か不足していますか?リスナーは、メソッド
の下の独自の tab# アクティビティに設定されます。上記の手法を試す以外に、メインの親アクティビティ #1 の下にリスナーを設定しようとしました。しかし、メソッドは呼び出されませんでした。ヌルポインタ例外も発生しました。oncreate

onResume()on Resume()

検証の背後にあるアイデアは次のとおりです。ユーザーがタブを変更している間、タブをスキップする前にデータを検証する必要があります。onTabChangedしたがって、タブ#2/タブ#3が選択された場合と同様のイベントでデータを検証するには、タブ#1が必要になります。
また、これは、現在のタブ#2 が選択され、ユーザーがタブ#1/タブ#3 を選択した場合にも適用されます

アドバイスをいただければ幸いです..
読んでくれてありがとう..

4

1 に答える 1

1

個々のタブ アクティビティの onTabChanged イベントでフォーム フィールドにユーザーが入力したデータを検証したいのですが、複数の setOnTabChangedListener を設定できません。

一瞬も必要ありませんし、OnTabChangeListener設定できたとしても役に立ちません。コードを作成したら、子アクティビティにアクセスする必要があります。これは、この質問の回答の 1 つを使用して行うことができます。問題は、受け入れられたものを除いて、これらの回答が非推奨の方法を使用していることです。

コメントで提案した私の方法は、タブとして使用される子アクティビティのそれぞれに静的ブール値フィールドを設定し、それらのアクティビティのビューの状態が変化するたびに、すべてのアクティビティでそのブール値フラグを更新できるようにすることです (ifにチェックCheckBoxを入れる、 に何かを入力するEditTextなど)。次に、 で目的の子アクティビティのフラグを確認するだけですOnTabChangeListener。私の方法は機能するはずですが、コードが少し乱雑であるため、かなり変更する必要があります。

メインの Parent アクティビティ #1 の下で onResume() にリスナーを設定しようとしました。しかし、on Resume() メソッドは呼び出されませんでした。ヌルポインタ例外も発生しました。

NullPointerExceptionで使用する子アクティビティへの参照を初期化する場所を見たことがないため、コードでが取得されるのは正常ですOnTabChangeListener

また:

使用しないでくださいTabActivityFragmentsより柔軟なフレームワークを支持して廃止されました。現在のページの検証が失敗し、そのために少し遅れる可能性がある場合は、タブの変更を停止したいと思うので、これらのフラグメントが役立つOnTabChangeListener可能性があります (ただし、必要なものについて間違っている可能性があります)。

補足として、コードで を使用して、ではなく等価性equalsをテストします。String==

于 2013-01-11T18:42:04.497 に答える