ここ数日から、Spinner を ViewGroup で動作させようとしましたが、成功しませんでした。:-{。カスタム ViewGroup 内にフラグメント コンテナーを配置しました。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:boxMenu="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".TestActivity"
android:id="@+id/frame" >
<com.imper.boxmenulibrary.BoxMenuLayout
android:id="@+id/box_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
boxMenu:boxSize="40dp"
boxMenu:directionY="bottomToTop"
boxMenu:directionX="rightToLeft"
boxMenu:showStart="false"
android:padding="5dp"
android:background="#ffffff00">
<LinearLayout
android:id="@+id/fragment_container"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="top|center"
android:orientation="vertical">
</LinearLayout>
</com.imper.boxmenulibrary.BoxMenuLayout>
そのフラグメントコンテナで、次のようにフラグメントを置き換えます:
FragmentManager fm = ((Activity) context).getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fragment_container, new TestFragment());
ft.commit();
私の TestFragment xml レイアウトは次のようになります。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<Spinner
android:id="@+id/test_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
TestFragment の実装は次のようになります。
public class TestFragment extends BoxLayout implements OnItemSelectedListener {
Spinner testSpinner;
public TestFragment() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance) {
View view = inflater.inflate(R.layout.test_view, container, false);
testSpinner = (Spinner) view.findViewById(R.id.test_spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(container.getContext(), R.array.day, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
testSpinner.setAdapter(adapter);
testSpinner.setOnItemSelectedListener(this);
return view;
}
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Toast.makeText(getActivity(), "Bingo", Toast.LENGTH_SHORT).show();
Log.d("Bingo", "onItemSelected");
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
Toast.makeText(getActivity(), "Bingo Nothing", Toast.LENGTH_SHORT).show();
Log.d("Bingo", "onNothingSelected");
}
}
問題は、スピナーのドロップダウンから何かを選択しようとすると、何も選択されず、OnItemSelected イベントがまったく発生しないことです。
FragmentContainer がカスタム ViewGroup から移動されると、同じコードが正常に機能します。なぜそれが起こるのですか?カスタム ビュー グループで Spinner を正常に動作させるにはどうすればよいですか??