При выборе элемента счетчика выбранный элемент изменяется на первый элемент - PullRequest
0 голосов
/ 16 февраля 2020

Я реализовал спиннер с пользовательским адаптером. Когда я выбираю любой элемент этого блесны, он исчезнет из списка блесен. Позиция переопределяется первым элементом списка, в результате чего появляется двойной. Например:

Нажмите на счетчик:

  • Элемент 1
  • Элемент 2
  • Элемент 3 <- Выбрать элемент 3 </li>

Повторное открытие счетчика:

  • Item 1
  • Item 2
  • Item 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 голосов
/ 19 февраля 2020

Я сам отследил проблему, проблема в том, что я использовал метод 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;
...