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;
}
}
}