我已经实现了带有自定义适配器的微调器。 当我选择此微调器的任何项目时,它将导致从微调器列表中消失。 该位置被列表的第一项覆盖,从而使位置显示为两倍。 例如:
点击微调器:
重新打开微调器:
有人知道,为什么要覆盖该位置以及如何避免该情况?
public class activityScheduler extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
Spinner spinner;
Adapter.spinner.spinAdapterActuator componentActuator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_schedule);
spinner = findViewById(R.id.spinner_sensors);
spinner.setOnItemSelectedListener(this);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Actuator i = componentActuator.getActuator(position);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
Update();
}
});
}
public void Update() {
ArrayList<Actuator> components = new ArrayList<>();
List<Actuator> componentList = allOperationList();
item = new Actuator();
for (int i=0; i < componentList.size(); i++)
{
item = componentList.get(i);
components.add(item);
Log.d(componentList.size() + "",item.name);
}
componentActuator = new spinner.spinAdapterActuator(activityMain.getContextOfApplication(),components);
spinner.setAdapter(componentActuator);
componentActuator.notifyDataSetChanged();
}
public List<Actuator> allOperationList (){
return new Select()
.from(Actuator.class)
.execute();
}
}
// And the adapter
public static class spinAdapterActuator extends BaseAdapter {
Context context;
private ArrayList<Actuator> arrayList;
public spinAdapterActuator (Context context, ArrayList<Actuator> arrayList) {
this.context = context;
this.arrayList = arrayList;
}
@Override
public int getCount() {
return arrayList.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
public Actuator getActuator(int position) {
return arrayList.get(position);
}
public View getView (int position, View convertView, ViewGroup parent){
if(convertView == null){
convertView = View.inflate(context,R.layout.spinner_scheduler, null);
ImageView icon = convertView.findViewById(R.id.imageView);
TextView name = convertView.findViewById(R.id.txt_component);
Actuator item = arrayList.get(position);
name.setText(item.getDescription());
icon.setImageResource(Converter.toImg(item.getName(),1));
}
return convertView;
}
}
答案 0 :(得分:0)
我自己已经跟踪了该问题,问题在于我以错误的方式使用了getview方法:
if(convertView == null){
convertView = View.inflate(context,R.layout.spinner_scheduler, null);
ImageView icon = convertView.findViewById(R.id.imageView);
TextView name = convertView.findViewById(R.id.txt_component);
name.setText(item.getDescription());
icon.setImageResource(Converter.toImg(item.getName(),1));
}
return convertView;
应该是
if(convertView == null){
convertView = View.inflate(context,R.layout.spinner_scheduler, null);
}
ImageView icon = convertView.findViewById(R.id.imageView);
TextView name = convertView.findViewById(R.id.txt_component);
name.setText(item.getDescription());
icon.setImageResource(Converter.toImg(item.getName(),1));
return convertView;