选择微调器项目时,selecteditem更改为第一个项目

时间:2020-02-16 00:45:27

标签: java android spinner adapter

我已经实现了带有自定义适配器的微调器。 当我选择此微调器的任何项目时,它将导致从微调器列表中消失。 该位置被列表的第一项覆盖,从而使位置显示为两倍。 例如:

点击微调器:

  • 项目1
  • 第2项
  • 第3项<-选择第3项

重新打开微调器:

  • 项目1
  • 第2项
  • 项目1

有人知道,为什么要覆盖该位置以及如何避免该情况?

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;

        }
    }

1 个答案:

答案 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;