ListView не отображает данные из HashMap - PullRequest
0 голосов
/ 27 марта 2019

В данный момент я новичок в Android и пытаюсь решить проблему. Я сделал приложение Quizz (используя OpenClassRoom MOOC - французский сайт), и мне нужно создать рейтинг очков. Для этого у меня есть два (на самом деле три, но мне нужно использовать только два из них): MainActivity и HistoricActivity.

Я отправляю из MainActivity в HistoricActivity хэш-карту, хранящую имя игрока и его счет.

Для отображения моих данных в виде списка мне нужен адаптер, который я создал.

Итак, в моем HistoricAdapter я расширился от BaseAdapter и переопределил метод getView. В этом методе я пытаюсь перебрать свой HashMap и для каждой игры, чтобы отобразить имя игрока и его счет.

Первая игра, работает отлично. Вторая игра, вот беда ... Она отображает второе имя игрока и его счет, но также удаляет результат моей первой игры. Это идет так:

Первая игра: Лена 3 (имя и оценка) Вторая игра: Макс 0, Макс 0 (первая строка заменяется Макс 0) Третья игра: Джек 1, Джек 1, Джек 1 (и так далее)

Ожидаемый результат должен быть: (для второй игры) Лена 3, Макс 0

Может ли Айноне помочь, пожалуйста? Я думаю, что я серьезно пропускаю большой шаг! Спасибо:)

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;

import com.example.topquiz.R;
import com.example.topquiz.adapter.HistoricTableAdapter;

import java.util.HashMap;
import java.util.List;

public class HistoricActivity extends AppCompatActivity {

    private Button mBackButton;
    private ListView mListView;

    private HashMap<String, List<Integer>> tabScores;

    private String player;
    private int score;

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

        mBackButton = (Button) findViewById(R.id.activity_historic_back_button);
        mListView = (ListView) findViewById(R.id.activity_historic_table_listview);

        tabScores = (HashMap<String, List<Integer>>) getIntent().getSerializableExtra(MainActivity.TREE_MAP_SAVED);

        HistoricTableAdapter adapter = new HistoricTableAdapter(this, tabScores);
        mListView.setAdapter(adapter);

        mBackButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }


}

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.example.topquiz.R;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;


public class HistoricTableAdapter extends BaseAdapter {

    private Activity context;
    HashMap<String, List<Integer>> map;

    private String key;
    private int singleValue;


    public HistoricTableAdapter(Activity context, HashMap<String, List<Integer>> map) {
        super();
        this.context = context;
        this.map = map;
    }


    @Override
    public int getCount() {
        if (map.size() < 5) {
            return map.size();
        } else {
            return 5;
        }

    }

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

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

    public View getView(int position, View view, ViewGroup parent) {

        final ViewHolder holder;

        if (view == null) {
            LayoutInflater inflater = context.getLayoutInflater();
            view = inflater.inflate(R.layout.activity_historic_list_view, parent, false);
            holder = new ViewHolder();

            holder.playerNameTxt = (TextView) view.findViewById(R.id.activity_historic_list_view_name_player);
            holder.scorePlayerTxt = (TextView) view.findViewById(R.id.activity_historic_list_view_score_player);

            view.setTag(holder);

        } else {
            holder = (ViewHolder) view.getTag();
        }


        for (Map.Entry<String, List<Integer>> entry : map.entrySet()) {
                key = entry.getKey();
                holder.playerNameTxt.setText(key);
                for (int singleValue : entry.getValue()) {
                    holder.scorePlayerTxt.setText(String.valueOf(singleValue));
                }

        }

        return view;
    }

    static class ViewHolder {
        private TextView playerNameTxt;
        private TextView scorePlayerTxt;
    }

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