У меня есть ListView, который отображает пользовательский вид, когда пользователь нажимает кнопку поиска. Каждый пользовательский вид - это флажок. Когда пользователь устанавливает флажок, объект в этой позиции попадает в список. Что мне нужно сделать, это: если пользователь снова нажимает на кнопку поиска, представление, которое уже было проверено (находится в списке), не может снова появиться в ListView.
Я сделал код, который отлично работает в Android 6.0, моя проблема в Android 9.0, который возвращает:
java .lang.NullPointerException: Попытка для вызова виртуального метода 'int android .view.View.getImportantForAccessibility ()' для нулевой ссылки на объект
Это код адаптера:
package com.example.nerasexpert.adapter;
import android.app.Activity;
import android.net.wifi.ScanResult;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import com.example.nerasexpert.R;
import java.util.ArrayList;
import java.util.List;
public class ListaDevicesAdapter extends BaseAdapter {
private List<ScanResult> devices;
private final Activity activity;
private ArrayList<ScanResult> selectedDevices = new ArrayList<>();
public ListaDevicesAdapter(Activity activity, List<ScanResult> nerasList) {
this.activity = activity;
this.devices = nerasList;
}
@Override
public int getCount() {
return devices.size();
}
@Override
public Object getItem(int position) {
return devices.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
LayoutInflater inflater = activity.getLayoutInflater();
View viewCriada = inflater.inflate(R.layout.item_install, viewGroup, false);
Log.i("lista devices", "" + devices);
Log.i("item", "" + devices.get(position));
Log.i("selected devices", "" + selectedDevices);
for (ScanResult device :
selectedDevices){
if(device.SSID.equals(devices.get(position).SSID)) {
return null;
}
}
populaView(position, viewCriada);
return viewCriada;
}
private void populaView(int position, View viewCriada) {
CheckBox deviceName = viewCriada.findViewById(R.id.checkBox);
ScanResult deviceDevolvido = devices.get(position);
deviceName.setText(deviceDevolvido.SSID);
deviceName.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
selectedDevices.add(deviceDevolvido);
} else {
selectedDevices.remove(deviceDevolvido);
}
}
});
}
public ArrayList<ScanResult> getSelectedDevicesList() {
return this.selectedDevices;
}
public void update(List<ScanResult> list) {
this.devices.clear();
this.devices.addAll(list);
notifyDataSetChanged();
}
}
Я знаю, что проблема заключается в возврате нулевого значения, когда объекты существуют в списке, но что я могу сделать, чтобы получить тот же результат без исключения NullPointException в Android 9.0?