HashMap повторяет последние элементы в Android Studio - PullRequest
0 голосов
/ 05 июля 2018

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

Вот код для моей HashMap

final String[] bookTitles = new String[]{
            "android-iconify",
            "Calligraphy",
            "SmartTabLayout",
            "android-viewpager-transformers",
            "Android-Rate",
            "FloatingActionButton",
            "TapTargetView",
            "MaterialDrawer"

    };
    final String[] authors = new String[]{

            "Version 2.2.2",
            "Version 2.2.0",
            "Version 1.6.1",
            "Version 1.0.1",
            "Version 1.0.1",
            "Version 1.6.4",
            "Version 1.11.0",
            "Version 6.0.8"


    };
    final String[] bookPages = new String[]{
            "Copyright 2015 Joan Zapata",
            "Copyright 2013 Christopher Jenkins",
            "Copyright (C) 2015 ogaclejapan\nCopyright (C) 2013 The Android Open Source Project",
            "Copyright 2015 Georgi Eftimov",
            "Maintained by hotchemi",
            "Copyright 2015 Dmytro Tarianyk",
            "Copyright 2016 Keepsafe Software Inc.",
            "Copyright 2018 Mike Penz"


    };
    ArrayList<HashMap<String, String>> authorList = new ArrayList<>();
    for (int i = 0; i < 8; i++){

        HashMap<String, String> data = new HashMap<>();
        data.put("title", bookTitles[i]);
        data.put("pages", bookPages[i]);
        data.put("author", authors[i]);


        authorList.add(data);

    }


    //Setup adapter
    customListViewAdapter = new CustomListViewAdapter(getApplicationContext(), authorList);
    listView.setAdapter(customListViewAdapter);

А вот код моего адаптера CustomListView.

Адаптер CustomListView

    package com.novamlineam.meezan;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.zip.Inflater;


public class CustomListViewAdapter extends BaseAdapter {

    private Context mContext;
    private  ArrayList<HashMap<String, String>> books;
    private static LayoutInflater inflater = null;


    public CustomListViewAdapter(Context context, ArrayList<HashMap<String, String>> data) {

        mContext = context;
        books = data;
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }


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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View view = convertView;

        if (convertView == null){

            view = inflater.inflate(R.layout.list_row, null);

            TextView title = (TextView) view.findViewById(R.id.libraryName);
            TextView author = (TextView) view.findViewById(R.id.libraryVersion);
            TextView pages = (TextView) view.findViewById(R.id.libraryCopyright);

            HashMap<String, String> mBook = new HashMap<>();

            mBook = books.get(position);



            title.setText(mBook.get("title"));
            author.setText(mBook.get("author"));
            pages.setText(mBook.get("pages"));




        }


        return view;
    }
}

А вот вывод, который я получаю

вывод адаптера CustomListView
оставшийся вывод адаптера CustomListView

Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 06 июля 2018

Попробуйте это:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view;
    if (convertView == null){
        view = inflater.inflate(R.layout.list_row, null);
    } else {
        view = convertView;
    }

    TextView title = (TextView) view.findViewById(R.id.libraryName);
    TextView author = (TextView) view.findViewById(R.id.libraryVersion);
    TextView pages = (TextView) view.findViewById(R.id.libraryCopyright);

    HashMap<String, String> mBook = new HashMap<>();
    mBook = books.get(position);

    title.setText(mBook.get("title"));
    author.setText(mBook.get("author"));
    pages.setText(mBook.get("pages"));

    return view;
}

Надеюсь, это поможет!

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