android spinner 改变事件,Android Spinner没有对任何点击事件做出反应

博主在Android开发中创建了一个自定义Spinner,并通过XML解析填充数据。问题在于,虽然数据成功显示,但Spinner的点击事件只在初始时触发一次OnItemSelectedListener,之后不再响应。代码中展示了Spinner的实现细节,包括事件监听器的设置和自定义适配器的使用。然而,点击选择项目时,弹出菜单并未消失,也没有进一步的动作。博主寻求解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我构建了一个自定义Spinner,它有一个方法来加载一些数据,一旦这些数据加载(在ArrayList事件中),它们就会显示出来。Android Spinner没有对任何点击事件做出反应

一切工作除了一些讨厌的东西:我发现这个微调的任何点击事件(改变所选择的项目),我OnItemSelectedListener仅在开始触发一次......

但比布拉布拉好,这里是代码:

public class ActionChooser extends Spinner {

private Context c;

ArrayList events;

OnItemSelectedListener listener;

public ActionChooser(Context context) {

super(context);

this.c = context;

init();

}

public ActionChooser(Context context, AttributeSet attrs) {

super(context, attrs);

this.c = context;

init();

}

private void init() {

// events arrayList is filled by a XML parser there, too long and uninteresting for SO

setAdapter(new CustomAdapter());

OnItemSelectedListener l = new OnItemSelectedListener() {

@Override

public void onItemSelected(AdapterView> adapterView, View view, int i, long l) {

Log.d("ActionChooser", "i:" + i);

}

@Override

public void onNothingSelected(AdapterView> adapterView) {

Log.d("ActionChooser", "nothing");

}

};

setOnItemSelectedListener(l);

}

private class Event {

String methodSignature;

String name;

boolean isBefore;

ArrayList data;

}

private class Param {

int pos;

String name;

}

private class CustomAdapter extends BaseAdapter implements SpinnerAdapter {

@Override

public int getCount() {

return events.size();

}

@Override

public Object getItem(int i) {

return events.get(i);

}

@Override

public long getItemId(int i) {

return i;

}

@Override

public View getView(int i, View view, ViewGroup viewGroup) {

View row = inflate(c, R.layout.row_action_chooser, null);

TextView tv = (TextView) row.findViewById(R.id.title);

TextView methodName = (TextView) row.findViewById(R.id.javaM);

CheckBox cb = (CheckBox) row.findViewById(R.id.checkbox);

LinearLayout ll = (LinearLayout) row.findViewById(R.id.dataContainer);

tv.setText(WordUtils.capitalize(events.get(i).name));

methodName.setText(events.get(i).methodSignature);

cb.setChecked(events.get(i).isBefore);

for (Param p : events.get(i).data) {

TextView pt = (TextView) row.findViewById(R.id.parameterTitle);

pt.setVisibility(VISIBLE);

TextView ptv = new TextView(c);

ptv.setText(p.name + " (pos: " + p.pos + ")");

ptv.setTextSize(10);

ll.addView(ptv);

}

return row;

}

}

}

的微调看起来或多或少的罚款:

f85657a3ce4481c7872670bb5e2de633.png

但是我不能点击它(实际上我可以,但它什么都不做,它甚至不会使弹出消失......)。

有人有想法吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值