1. ホーム
  2. アンドロイド

[解決済み】フラグメント内のXML onClickを使用して、ボタンのクリックを処理する方法

2022-03-24 17:29:40

質問

Honeycomb (Android 3)以前は、各Activityがボタンのクリックを処理するように登録されていました。 onClick タグを使用します。

android:onClick="myClickMethod"

そのメソッドの中で view.getId() とswitchステートメントでボタンロジックを実行します。

Honeycombの導入に伴い、私はこれらのアクティビティをフラグメントに分割し、多くの異なるアクティビティ内で再利用できるようにしました。ボタンの動作のほとんどはActivityに依存しないので、コードはFragmentsファイル内に置きたいと思います。 なし を登録する古い (1.6 以前の) 方法を使用しています。 OnClickListener を各ボタンに設定します。

final Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // Perform action on click
    }
});

問題は、レイアウトを拡張したときに、個々のフラグメントではなく、ホスティングアクティビティがボタンのクリックを受け取ることです。次のような良い方法はありますか?

  • ボタンのクリックを受信するフラグメントを登録しますか?
  • Activityのクリックイベントを、所属するフラグメントに渡しますか?

どのように解決するのですか?

こうすればいいんじゃない?

活動内容

Fragment someFragment;    

//...onCreate etc instantiating your fragments

public void myClickMethod(View v) {
    someFragment.myClickMethod(v);
}

断片です。

public void myClickMethod(View v) {
    switch(v.getId()) {
        // Just like you were doing
    }
}    


フラグメントを再利用できるようにカップリングを減らしてほしいという @Ameen さんへの返答です。

インターフェース

public interface XmlClickable {
    void myClickMethod(View v);
}

活動内容

XmlClickable someFragment;    

//...onCreate, etc. instantiating your fragments casting to your interface.

public void myClickMethod(View v) {
    someFragment.myClickMethod(v);
}

断片です。

public class SomeFragment implements XmlClickable {

//...onCreateView, etc.

@Override
public void myClickMethod(View v) {
    switch(v.getId()){
        // Just like you were doing
    }
}