0

スクロール中にGridViewのデータの一貫性を保つのに問題があります。基本的に、私は単純なビンゴ アプリに取り組んでおり、ユーザーが完全な 5x5 グリッドを表示できるように画面をスクロールできるようにしたいと考えています。私はこの質問を使用して、何が起こっているのかを理解しようとしています( Android: OnItemClick 後に GridView 配列の画像を置き換える) これを正しく理解している場合は、 getView() を変更して、各セルに再利用されたビューを使用しないようにする必要があります。これが私がこれまでに持っているものです:

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    final GridView gridview = (GridView) findViewById(R.id.gridview);
    final Bingo bingo = new Bingo();
    final String[] stuff = new String[25];
    for (int i=0;i<25;i++){
        stuff[i]=bingo.getValue(i);
    }
    stuff[12]="Free Space";

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
         android.R.layout.simple_list_item_1, stuff);


    gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

           bingo.open(position);
           if (bingo.isOpen(position))
           v.setBackgroundColor(Color.rgb(12, 15, 204));
           else
           v.setBackgroundColor(Color.rgb(128, 128, 128));


            if (bingo.bingo()==true){
                Toast.makeText(getApplicationContext(),
                        //((TextView) v).getText(),
                        "BINGO",Toast.LENGTH_SHORT).show();
            }
        }
    });
}

このコードの種類は機能します。背景が変わり、私のビンゴ クラスとうまく連携しますが、スクロールすると、ランダムなセルの色が変わり、セルの値が消えて空白が残ることがあります。アダプターの宣言後に次のコードを試しましたが、デバイスにロードするとすぐにクラッシュします。

   {
            public View getView(int position, View convertView, ViewGroup                                    parent){
            Context mContext = null;
            TextView textView= new TextView(mContext);
            if (convertView == null) {  


           textView.setText(stuff[12]);
            } else {
                textView = (TextView) convertView;
            }

            if (bingo.isOpen(position))
                textView.setBackgroundColor(Color.rgb(12, 15, 204));
            else
                textView.setBackgroundColor(Color.rgb(128, 128, 128));

            return textView;
        }
    };

これをテキストビューで機能させる方法を理解するのに問題があります。これに関するヘルプは大歓迎です。

4

1 に答える 1

0

null コンテキストを使用してテキストビューを作成すると、エラーが発生します

public View getView(int position, View convertView, ViewGroup parent){ 
        // here you declare the context is null
        // Context mContext = null;         
        TextView textView;
        if (convertView == null) {  
            // error occurs because the context is null
            // TextView textView= new TextView(mContext); 
            // so try to use
            textView = new TextView(parent.getContext()); 
            textView.setText(stuff[12]);
        } else {
            textView = (TextView) convertView;
        }

        if (bingo.isOpen(position))
            textView.setBackgroundColor(Color.rgb(12, 15, 204));
        else
            textView.setBackgroundColor(Color.rgb(128, 128, 128));

        return textView;
}
于 2015-03-09T02:00:10.117 に答える