LinearLayoutを拡張するカスタムコントロールを作成しています。そのコントロール内では、スピナーを使用して、ユーザーがリストからアイテムを選択できるようにしています。私が抱えている問題は、OnItemSelectedListenerイベントが発生しないことです。同じコードをアクティビティ/フラグメントに移動すると、すべてが正常に機能します。
私は同じ問題について尋ねる他の人に与えられたいくつかの答えに従いました、そして何も助けにはなりませんでした。それでもイベントは発生しません。
これは、コードではなくレイアウトXML内にスピナーを配置することを提案した回答に従った後の私のコードです。「新しいスピナー(ctx)」だけを試しても同じ結果が得られます...
レイアウトXML:
<Spinner
android:id="@+id/accSpinner"
android:layout_width="0dip"
android:layout_height="0dip" />
コントロールの初期化関数(コントロールコンストラクターで呼び出されます):
private void init()
{
LayoutInflater layoutInflater = LayoutInflater.from(mContext);
mAccountBoxView = layoutInflater.inflate(R.layout.control_accountselector, null);
mTxtAccount = (TextView)mAccountBoxView.findViewById(R.id.txtAccount);
mSpinner = (Spinner)mAccountBoxView.findViewById(R.id.accSpinner);
mAccountBoxView.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
mSpinner.performClick();
}
});
setSpinner();
addView(mAccountBoxView);
}
private void setSpinner()
{
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(mContext, android.R.layout.simple_spinner_item, mItems);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSpinner.setAdapter(dataAdapter);
mSpinner.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
String selectedItem = mItems.get(position);
handleSelectedItem(selectedItem);
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
}
});
}
コントロールに触れるとスピナーがうまく上がり、アイテムのリストが表示されます。アイテムをクリックするとスピナーは閉じますが、onItemSelectedにもonNothingSelectedにもアクセスできません。
何か案は?