我构建了一个自定义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;
}
}
}
的微调看起来或多或少的罚款:
但是我不能点击它(实际上我可以,但它什么都不做,它甚至不会使弹出消失......)。
有人有想法吗?