滚动后 Gridview 搞砸了

Gridview messed up after scrolling

我正在为我的填字游戏使用 GridView。在滚动 gridview 之后,所有的黑色部分(非字母框)都显示了不应该发生的字母。

这是我的适配器。谁能帮忙?谢谢

private class CrossWordPuzzleAdapter extends BaseAdapter {
    private Context mContext;
    private int mWidth, mHeight;

    public CrossWordPuzzleAdapter(Context c, int width, int height) {
        mContext = c;
        mWidth = width;
        mHeight = height;
    }

    public int getCount() {
        return mWidth * mHeight;
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;

        LayoutInflater mInflater = (LayoutInflater) mContext
                .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.box_layout, null);

            holder = new ViewHolder();
            holder.numberText = (TextView) convertView.findViewById(R.id.numberText);
            holder.charText = (GridViewItem) convertView.findViewById(R.id.charText);
            convertView.setTag(holder);
        } else
            holder = (ViewHolder) convertView.getTag();

        int x = -1, y = -1;

        if (position < mWidth) {
            x = position;
            y = 0;
        } else {
            x = position % mWidth;
            y = position / mHeight;
        }
        if (mPuzzleBoard.getCharPlace(x, y) != '[==]' && mPuzzleBoard.getCharPlace(x, y) != ' ') {
            String questionNoStr = mPuzzleBoard.getQuestionNo(x, y);

            holder.numberText.setText(questionNoStr);
            if (isRevealed) {
                holder.charText.setText("" + Character.toString(mPuzzleBoard.getCharPlace(x, y)).toUpperCase());
                holder.charText.setTextColor(Color.GREEN);
            }
            holder.charText.setBackground(getResources().getDrawable(R.drawable.letter_box_white));
        } else {
            holder.charText.setBackground(getResources().getDrawable(R.drawable.letter_box_black));
            convertView.setSelected(false);
        }

        return convertView;
    }

我终于找到了解决办法。显示字母的错误框实际上是包含先前字母的视图的先前框。所以,滚动后位置都乱了,虽然我把框颜色设置为黑色,但我没有设置框为空。

所以这就是我所做的:

            else {
                holder.numberText.setText(""); //<< reset the box to empty
                holder.charText.setText(""); //<< reset the box to empty
                holder.charText.setBackground(getResources().getDrawable(R.drawable.letter_box_black));
                convertView.setSelected(false);
            }