2015-02-11 115 views
0

我有一个应用程序显示一个篮球队的时间表。它列出他们已经玩过的游戏,然后列出即将到来的游戏。根据是否玩过游戏,我正在改变行布局。例如,如果游戏已经播放,我在TextView中显示“W”或“L”,但如果游戏未播放,我隐藏了此TextView。ListView查看回收行弄错

我的问题是,当我滚动到底部,其中所有的TextViews被隐藏,然后滚回到顶部,所有的“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; 
    } 
} 
+0

使用viewHolder。它可以解决你的问题 – 2015-02-11 22:27:58

回答

1

您可以隐藏它们,但不会让它们再次显示。由于listview重用视图,它们保持隐藏状态。如果比赛已进行,请致电tvWin.setVisibility(View.VISIBLE);。也使用视图来表现。

+0

仅仅因为它强制执行ViewHolders而转移到RecyclerView是值得的。 – 2015-02-11 22:49:58

+0

啊,这可能只是这个简单的大声笑我会尝试,谢谢 – user1282637 2015-02-11 22:50:38