2

GridView を表示するために展開できる項目を含む ListView に取り組んでいます。ListView とアダプターは正常に動作し、GridView は追加時に正常に拡張されますが、グリッドに複数の行を表示することはできません。列を設定した長さに関係なく、表示される列は1つだけであり、ビューが小さすぎるという問題ではないことは明らかです(私はそれをとてつもなく大きな高さにしようとしました)。ここで他の質問を閲覧しましたが、これは一般的な問題ではないようです。私は何を間違っていますか?

xml:

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scorecardGridView"
android:layout_width="match_parent"
android:layout_height="match_parent" 
android:columnWidth="25dp"
android:numColumns="18"
android:isScrollContainer="false"
android:verticalSpacing="5dp"
android:horizontalSpacing="5dp"
android:stretchMode="columnWidth"
android:gravity="center" />

GridAdapter getView() コード:

public View getView(int position, View convertView, ViewGroup parent) {
    Log.d("position",String.valueOf(position));
    TextView textView;
    if (convertView == null) { // if it's not recycled, initialize some
                                // attributes
        textView = new TextView(context);
        textView.setLayoutParams(new GridView.LayoutParams(25, 25));
    } else {
        textView = (TextView) convertView;
    }
    if (position < 18)
        textView.setText(String.valueOf(position+1));
    else {
        position -= 18;
        textView.setTypeface(null, Typeface.BOLD);
        if (scores[position] > 0) {
            textView.setTextColor(context.getResources().getColor(
                    R.color.red));
            textView.setText("+" + String.valueOf(scores[position]));
        } else {
            if (scores[position] < 0)
                textView.setTextColor(context.getResources().getColor(
                        R.color.blue));
            textView.setText(String.valueOf(scores[position]));
        }
    }
    return textView;
}

これを使用して、2 行 18 列のゴルフ スコアカードを表示します。何をしても、最初の行だけが表示されます。numColumns 属性を変更すると、その新しい列数が表示されますが、常に 1 行だけです。getView() が呼び出されている位置をログに記録しようとしたことがわかります。最初の行に対してのみ呼び出されていることがわかります。

他のコードを見たい場合はお知らせください。ありがとうございます。

4

0 に答える 0