ListView不显示HashMap中的数据

时间:2019-03-27 14:35:01

标签: android listview dictionary hash

我目前是Android的新手,正在尝试解决问题。 我做了一个Quizz应用程序(使用OpenClassRoom MOOC-法语网站),我需要创建一个排名分数。 为此,我有两个活动(实际上是三个,但在这里只需要使用其中两个)活动:MainActivity和HistoricActivity。

我正在从MainActivity发送到HistoricActivity一个HashMap,其中存储了玩家的姓名和分数。

为了在listView中显示数据,我需要创建的适配器。

因此,在我的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;
    }

}

0 个答案:

没有答案