我正在编写一个扩展 LinearLayout 的自定义控件。在该控件中,我使用微调器让用户从列表中选择一个项目。我遇到的问题是 OnItemSelectedListener 事件没有触发。将相同的代码移动到 Activity/Fragment 时,一切正常。
我遵循了一些其他人询问相同问题的答案,但没有任何帮助。事件仍然没有触发。
这是我遵循建议将微调器放在我的布局 XML 中而不是通过代码的答案之后的代码。当我尝试“new Spinner(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..
有任何想法吗?