フラグメント内で XML onClick を使用してボタンのクリックを処理する方法 質問する

フラグメント内で XML onClick を使用してボタンのクリックを処理する方法 質問する

Honeycomb 以前 (Android 3) では、各アクティビティはonClickレイアウトの XML 内のタグを介してボタンのクリックを処理するように登録されていました。

android:onClick="myClickMethod"

そのメソッド内ではview.getId()、switch ステートメントを使用してボタン ロジックを実行できます。

Honeycomb の導入により、これらのアクティビティをフラグメントに分割し、さまざまなアクティビティ内で再利用できるようにしています。ボタンの動作のほとんどはアクティビティに依存しないため、ボタンごとに登録する古い (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
    }
});

問題は、レイアウトが膨張したときに、ボタンのクリックを受け取るのは個々のフラグメントではなく、ホストアクティビティであることです。どちらに対しても良いアプローチはありますか?

  • ボタンのクリックを受け取るためにフラグメントを登録しますか?
  • クリック イベントをアクティビティから、それが属するフラグメントに渡しますか?

ベストアンサー1

onClick イベントの処理には、次のソリューションを使用することをお勧めします。これは、アクティビティとフラグメントにも機能します。

public class StartFragment extends Fragment implements OnClickListener{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.fragment_start, container, false);

        Button b = (Button) v.findViewById(R.id.StartButton);
        b.setOnClickListener(this);
        return v;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.StartButton:

            ...

            break;
        }
    }
}

おすすめ記事