У меня есть приложение, которое показывает график для баскетбольной команды. В нем перечислены игры, которые они уже играли, а затем предстоящие игры. Я изменяю макет строки в зависимости от того, была ли игра воспроизведена. Например, если игра была сыграна, я показываю «W» или «L» в TextView, но если игра не была воспроизведена, я скрываю этот TextView.ListView view recycling messes up rows
Проблема в том, что когда я прокручиваю нижнюю часть, где все текстовые элементы скрыты, а затем прокручивается назад, все «L» и «W», с которых они должны начаться, являются теперь скрыто. Есть ли все-таки предотвратить это? Вот мой адаптер:
package com.example.sixerstrivia;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class GameAdapter extends ArrayAdapter<Game> {
public GameAdapter(Context context, ArrayList<Game> games) {
super(context, R.layout.game_row, games);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final Game game = getItem(position);
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(
R.layout.game_row, parent, false);
}
TextView tvTopTeam = (TextView) convertView
.findViewById(R.id.tvTopTeam);
TextView tvBottomTeam = (TextView) convertView
.findViewById(R.id.tvBottomTeam);
TextView tvTopScore = (TextView) convertView
.findViewById(R.id.tvTopScore);
TextView tvBottomScore = (TextView) convertView
.findViewById(R.id.tvBottomScore);
TextView tvAt = (TextView) convertView.findViewById(R.id.tvAt);
TextView tvVs = (TextView) convertView.findViewById(R.id.tvVs);
TextView tvWin = (TextView) convertView.findViewById(R.id.tvWin);
TextView tvDate = (TextView) convertView.findViewById(R.id.tvDate);
if (game.completed) {
tvDate.setText(game.gameDate);
if (game.win) {
tvWin.setText("W");
tvWin.setTextColor(Color.GREEN);
} else {
tvWin.setText("L");
tvWin.setTextColor(Color.RED);
}
} else {
tvDate.setText(game.gameDate + "\n" + game.gameTime + " PM");
tvWin.setVisibility(View.GONE);
tvTopScore.setVisibility(View.INVISIBLE);
tvBottomScore.setVisibility(View.INVISIBLE);
}
if (!game.homeTeam.equals("PHI")) {
tvTopTeam.setText(game.awayTeam);
tvVs.setVisibility(View.GONE);
if (game.completed) {
tvAt.setVisibility(View.GONE);
tvTopScore.setText(game.awayScore);
tvBottomScore.setText(game.homeScore);
}
tvBottomTeam.setText(game.homeTeam);
} else {
tvTopTeam.setText(game.homeTeam);
tvAt.setVisibility(View.GONE);
if (game.completed) {
tvVs.setVisibility(View.GONE);
tvTopScore.setText(game.homeScore);
tvBottomScore.setText(game.awayScore);
}
tvBottomTeam.setText(game.awayTeam);
}
return convertView;
}
}
используйте viewHolder. он может исправить вашу проблему. –