В данный момент я новичок в 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;
}
}