我目前是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;
}
}