1

私はすでにGridViewsとViewHoldersについてたくさん読んでいますが、何も役に立ちませんでした。それが可能であるかどうか、または私がそれを管理できないかどうかはわかりません。問題:GridViewは、ユーザーが数字を入力した場合のTextView、または可能な数字の鉛筆マークを表示するための別のGridViewのいずれかを含むことができるSudokufieldを表します。アイデア:GridViewとTextViewを保持するViewHolder。TextViewのテキストが空の場合は、鉛筆マークが(GridViewに)表示されます。そうでない場合は、番号が付いたTextViewが表示されます。アダプターのコードは次のとおりです:(レイアウトに問題があるのではないでしょうか?完全に直感的ではありません-.-)

編集:セルは、各フィールドの開始ビューを定義するビューの配列です。したがって、フィールドxがすでに数値yである場合、cells[x]にはテキストセットyのテキストビューが含まれます。(私はそれが少し醜いと思いますが、グリッドビューに精通しておらず、多くの問題があります:()

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;
}
}

ジャンに挨拶し、答えてくれてありがとう

4

1 に答える 1

0

さて、私は自分で解決策を見つけました。私は TextView のみを使用し、3 行のテキストで鉛筆マークを作成します。これは私が見つけた最も簡単な方法です。しかし、ビュー間の切り替えが可能かどうかを知りたいです。

于 2012-12-05T13:14:59.863 に答える