ArrayList адаптер получает неправильные данные в списке - PullRequest
0 голосов
/ 26 января 2020

Кто-нибудь знает, почему я получаю неправильные данные в моем AdapterClass, когда использую listview для заполнения адаптера. Вот код, который я использую

public class SchoolAdapter extends ArrayAdapter<SchoolClass> {
    ArrayList<SchoolClass> schoolclass;

    private SchoolAdapter schoolAdapter;



    public SchoolAdapter(Activity activity1, ArrayList<SchoolClass> schoolClassList1){
        super(activity1, R.layout.school_adapter, schoolClassList1);
        this.activity = activity1;
        this.schoolClassList = schoolClassList1;
    }


    @NonNull
    @Override
    public View getView (int position, View convertView, @NonNull ViewGroup parent) {
        LayoutInflater inflater = activity.getLayoutInflater();

        @SuppressLint({"ViewHolder", "InflateParams"}) View view = inflater.inflate(R.layout.school_adapter, null, false);
        school_name = view.findViewById(R.id.school_name);
        school_size = view.findViewById(R.id.school_size);
        school_btn  = view.findViewById(R.id.school_btn);

        SchoolClass schoolClass = schoolclass.get(position);

        school_name.setText(schoolClass.getSchoolName());
        school_size.setText(schoolClass.getSchool_Size());

                school_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
Toast.makeText(context, "Grant"+schoolClass.getSchoolName(), Toast.LENGTH_SHORT).show();
            }
        });


        return view;
    }
}

Примечание: Когда я использую listview.setOnItemClickListerner, я получаю правильные данные, где это должно быть, но когда я использую любой из щелчка элемент первого значения в адаптере, я получаю результат, как 5-й элемент, и когда я нажимаю второй элемент, то же самое, и когда я нажимаю третий элемент, я получаю результат, подобный восьмому или девятому элементу в адаптере, кажется, что все остальное в порядке, и мой код не отображает никаких ошибок, так как результат отображается, но это не правильный результат. Примечание 2. Я использую json для извлечения список, но результат отображается правильно только тогда, когда я нажимаю на элемент в адаптере, когда я получаю неправильный результат в тосте

Ответы [ 2 ]

0 голосов
/ 26 января 2020

Toast.makeText(context, "Grant "+ schoolclass.get(position).getName, Toast.LENGTH_SHORT).show();

public class SchoolAdapter extends ArrayAdapter<SchoolClass> {
    ArrayList<SchoolClass> schoolclass;
    Context context

    public SchoolAdapter(Context context ,ArrayList<SchoolClass> schoolClassList){
        super(context, R.layout.school_adapter, schoolClassList);
        this.activity = activity1;
        this.schoolClassList = schoolClassList1;
    }


    @NonNull
    @Override
    public View getView (int position, View convertView, @NonNull ViewGroup parent) {
        LayoutInflater inflater = activity.getLayoutInflater();

        @SuppressLint({"ViewHolder", "InflateParams"}) View view = inflater.inflate(R.layout.school_adapter, parent, false);
        school_name = view.findViewById(R.id.school_name);
        school_size = view.findViewById(R.id.school_size);
        school_btn  = view.findViewById(R.id.school_btn);

        schoolClass = schoolclass.get(position);

        school_name.setText(schoolClass.getSchoolName());
        school_size.setText(schoolClass.getSchool_Size());

        school_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Grant"+ schoolclass.get(position).getSchoolName(), Toast.LENGTH_SHORT).show();
            }
        });

        return view;
    }
}

0 голосов
/ 26 января 2020

Ваше имя экземпляра (школьного) почти совпадает с именем списка.

Изменить

"schoolClass = schoolClass.get(position);" to
"schoolClass = schoolclass.get(position);"

schoolclass - это список; schoolClass - это ваш предмет, я думаю, вы путаете верхний / нижний

...