2011-12-20 15 views
8

フラグメントに関するかなりの記事を読んでいますが、何をするのかについてはまだ混乱しています。フラグメント要素のフラグメントonClickメソッド

私は、2つのフラグメントを並べて表示するMainActivityを持っています。

android:onClick="buttonClicked" 

は、今私は、私はこれを実装する必要があると仮定しているだろうという方法

public void buttonClicked(View view) 

を実装したい断片の一つで、私はボタンがあり、ボタンのフラグメントレイアウトXMLで定義されていますMainActivity.javaではなく、FragmentA.javaにあります。しかし、MainActivity.javaでそのメソッドが実装されている場合にのみ機能します。何故ですか?私には意味がない。 Pre Honeycombそのアクティビティに属しているアクティビティに属しているメソッドを、現在はタブレット上に配置しています。私は1つのMainActivityに多くのアクティビティをマージしています。例えば、FragmentA.javaに何を置いてもかまいません。このアプリがハンドヘルド上で実行されるため、あなた自身のアクティビティを開始する必要がある場合はどうしたら、onClickメソッドはMainActivityになくても、呼び出す必要があるアクティビティにあるはずです。私は現時点でかなり混乱しています...

+0

主なアクティビティコンテキストを使用してフラグメントレイアウトxmlが拡張されている可能性があります。他の人が答えるものを見てみましょう。 – blessenm

+0

"MainActivity.java'でメソッドが実装されている場合にのみ機能します。エラーが出るのですか、または単にあなたのコードがあなたに期待している結果を与えるわけではありませんか? –

+3

http://stackoverflow.com/questions/7570575/onclick-inside-fragment-called-on-activity 同じ質問が返されます。 – kzotin

答えて

4

私は具体的な問題は何か分かりませんが、おそらくこれが役立ちます。あなたは、モジュール式で再利用可能なアクティビティコンポーネントとして、各断片を設計する必要があり

Fragment SのAndroidのドキュメントから

。つまり、各フラグメントは独自のライフサイクルコールバックで独自のレイアウトと独自の動作を定義するため、複数のアクティビティに1つのフラグメントを含めることができるため、再利用のために設計し、別のフラグメントから1つのフラグメントを直接操作しないようにする必要があります。

つまり、別のフラグメントからフラグメントを操作しないでください。むしろ、これは基本的なアクティビティを通して行われるべきです。詳しくは、articleの「アクティビティへのイベントコールバックの作成」のセクションを読んでください(重要なものです!!)。

一方

、あなたはボタンがFragment自体の中のアクションを実行する場合(つまり、あなたがフラグメント内TextViewのテキストを変更するButtonクリックしたい場合)、あなたはFragmentでこれを実装する必要があり、 Activityではありません(これは、結果の動作がFragmentに含まれ、親Activityとは関係がないためです)。

コメントを残して、私の投稿が混乱しているかどうかを明確にすることができます...私は最近、理解し始めましたFragmentさん自身:)。

+4

AndyAndroidの懸念が十分に確立されていることを確認できます。私はTabHostと複数のFragmentActivityの同じ問題を抱えています。基本的には、レイアウトで呼び出されるonClickメソッドは、そのメソッドがTabHostクラスで定義されることを期待しています。フラグメントではありません。したがって、大きな問題です。 –

+0

私は正しく読んでいないかもしれませんが、これは答えとしてマークされていますが、プログラム上リスナーを作成せずにフラグメント内で 'onClick'リスナーを作成するにはどうすればいいですか? – katit

0

まあ、

私はそれがAndroidのコンテキスト構造の階層に関係していると思います。 アクティビティはすべての子ビューのホストであるため、フラグメントは実際にそのホストのコンテキストを使用していると言うことができます。そのため、フラグメントシステムのonClickを使用してフラグメントシステムを常に検索します。

これをチェックしてください。 Android developer onClick attribute description

私は1つのことをチェックしていませんが、テストをすることができます。 フラグメントではなくホストアクティビティで実装を提供することによって、フラグメントのレイアウトファイルonClickを使用して、親のメソッドを呼び出す必要があります。

関連する問題