Ошибка адаптера в ListView

#android #android-arrayadapter #baseadapter #android-context

#Android #android-arrayadapter #baseadapter #android-контекст

Вопрос:

Я хочу добавить новый макет с некоторыми конкретными данными в ListView.
Я создал класс, который расширяет базовый адаптер, но когда я пытаюсь поместить свои данные и контекст (this) в свой новый класс, он показывает ошибку

 package com.bignner.hotel;

public class MainActivity extends AppCompatActivity {
private Context context;
private ListView Placename;
@Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button btn= (Button)findViewById(R.id.btnAdd);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Placename =(ListView) findViewById(R.id.ListView);

            RadioGroup RG=(RadioGroup)findViewById(R.id.radiogrop);
            int SelectedId= RG.getCheckedRadioButtonId();
            RadioButton RB= (RadioButton)findViewById(SelectedId);
            String textRB=RB.getText().toString();
            int place=0;

            switch (textRB){
                case "Gust-house":
                    place=R.drawable.g;
                    break;
                case "Apartment":
                    place=R.drawable.a;
                    break;
                case "Hotel":
                    place=R.drawable.h;
                    break;
            }
            TextView placeName=(TextView)findViewById(R.id.editTextName);
            String name=placeName.getText().toString();
            TextView placeAddress=(TextView)findViewById(R.id.editTextAddress);
            String address=placeAddress.getText().toString();

            List<HotelEntry> tourPlace = new ArrayList<HotelEntry>();
            tourPlace.add(new HotelEntry(name,place));
            Myadapter adapter = new Myadapter(this,tourPlace);
            Placename.setAdapter(adapter);

        }
    });
}
}
  

И мой класс:

 public class Myadapter extends BaseAdapter {

private Context context;
private List<HotelEntry> hotels;

@Override
public int getCount() {
    return hotels.size();
}

@Override
public Object getItem(int position) {
    return hotels.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = inflater.inflate(R.layout.my_layout,parent,false);
    TextView placeName = (TextView) convertView.findViewById(R.id.textViewName);
    placeName.setText(hotels.get(position).getHotelName());
    ImageView LetterIcon = (ImageView) convertView.findViewById(R.id.imageViewIcon);
    LetterIcon.setImageResource(hotels.get(position).getTypeIcon());
    return convertView;

}
}
  

Ошибка находится в этой строке:

 Myadapter adapter = new Myadapter(this,tourPlace);
  

Я также заменил MainActivity.this на this, но все же я вижу эту ошибку.

Я не знаю, почему и как ее решить.
Я был бы признателен за некоторую помощь.

Ошибка:

введите описание изображения здесь

Комментарии:

1. Какую ошибку он показывает?

Ответ №1:

Вы не применили конструктор Myadapter класса. Итак, вам нужно его создать.

 public Myadapter(Context context, List<HotelEntry> list) { ... }
  

И верните MainActivity.this обратно — без этого вы пытаетесь разместить свой OnClickListener параметр конструктора as.

Ответ №2:

Поместите имя класса перед this

Ответ №3:

Переместите адаптер в onCreate . Добавьте в список и уведомите адаптер в onClick.

При необходимости также переместите все findViewById в onCreate , поскольку при каждом нажатии кнопки просмотр просмотров снижает производительность.

 public class MainActivity extends AppCompatActivity {

    List<HotelEntry> tourPlace = new ArrayList<HotelEntry>();
    Myadapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // These three lines need to be removed from the onClick
        Placename =(ListView) findViewById(R.id.ListView);
        Myadapter adapter = new Myadapter(this, tourPlace); 
        Planename.setAdapter(adapter);