Пользовательский адаптер ListView для Android 9.0 - NullPointerException - PullRequest
0 голосов
/ 31 марта 2020

У меня есть 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...