1

我已经阅读了很多关于 GridViews 和 ViewHolders 的内容,但没有什么能帮助我。不知道它是否可能,或者我只是无法管理它。问题: GridView 表示一个数独字段,如果用户输入一个数字,它可以包含一个 TextView 或另一个用于显示可能数字的铅笔标记的 GridView。想法:一个持有 GridView 和一个 TextView 的 ViewHolder。如果 TextView 的文本为空,则应显示铅笔标记(在 GridView 中),否则应看到带有数字的 TextView。这是我的适配器代码:(也许布局有一些问题?它完全不直观-.-)

编辑:单元格是一个视图数组,它定义了每个字段中的起始视图。因此,如果在字段 x 中已经是数字 y,则单元格 [x] 包含带有文本集 y 的文本视图。(我想它有点难看,但我不熟悉gridviews并且有很多问题:()

public class ViewAdapter extends BaseAdapter{
Context context;
View[] cells;
int size;

public ViewAdapter(Context context, View[] cells, int size) {
    this.context = context;
    this.cells = cells;
    this.size = size;
}

public int getCount() {
    return 81;
}

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

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

public View getView(int position, View target, ViewGroup parent) {
    ViewHolder holder;
    if (target == null) {
        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        target = inflater.inflate(R.layout.activity_game, parent, false);
        holder = new ViewHolder();
        if (cells[position] instanceof GridView) {
            holder.gv = (GridView)cells[position];
            holder.tv = new TextView(context);
            holder.tv.setText("");
        } else if (cells[position] instanceof TextView){
            holder.gv = new GridView(context);
            holder.gv.setNumColumns(3);
            holder.gv.setClickable(false);
            holder.tv = (TextView)cells[position];
        }
        target.setTag(holder);
    } else {
        holder = (ViewHolder)target.getTag();
    }

    GridView gv = holder.gv;
    gv.setBackgroundColor(Color.WHITE);
    gv.setLayoutParams(new GridView.LayoutParams(20, 20));      

    TextView tv = holder.tv;
    tv.setGravity(Gravity.CENTER);
    tv.setLayoutParams(new GridView.LayoutParams(LayoutParams.MATCH_PARENT, size));     
    tv.setBackgroundColor(Color.WHITE);
    tv.setTextAppearance(context, android.R.style.TextAppearance_Large);

    return target;
}

class ViewHolder {
    GridView gv;
    TextView tv;
}
}

问候 jan 并感谢您的任何回答

4

1 回答 1

0

好的,我自己找到了解决方案。我只使用 TextView 并在 3 行文本中做铅笔标记。这是我找到的最简单的方法。但我仍然想知道视图之间的切换是否可行。

于 2012-12-05T13:14:59.863 回答