1

私のアプリでは、いくつかのランダムに配置された ImageViews を持つ GridView を使用します。ユーザーは画像を選択する必要があります。選択したものをマークするには、ビューに setBackgroundColor() を使用します。私の問題は、ユーザーが別の画像を選択したい場合、以前に選択した画像 (またはグリッド内のすべての画像) の背景をリセット (または白に設定) する必要があることです。これを行う方法はありますか?

または、グリッド内の選択された画像が強調表示されるように、それを実装する別の可能性はありますか?

編集:コメントのすべてのヒントに感謝します。以下の解決策。

4

2 に答える 2

1

アダプターの再設定

 @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.grid_layout);

        Context context = this;

        gridView = (GridView) findViewById(R.id.grid_view);

        gridView.setAdapter(new ImageAdapter(this));

        gridView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View v,
                    int position, long id) {
            gridView.setAdapter(new ImageAdapter(context));
            v.setBackgroundColor(Color.CYAN);
            }
        });
    }
于 2013-01-26T17:14:38.587 に答える
0

OK、私がチェックした可能な実用的な解決策(Rachel Gallenからのリンクの1つ)は使用することです

gridView.getChildAt(previous).setBackgroundColor(Color.WHITE); 

私が使用した別の解決策は、前のビューを静的変数に保持するダーティハックです。

...
View previousView = null;
...
 @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.grid_layout);

        gridView = (GridView) findViewById(R.id.grid_view);

        gridView.setAdapter(new ImageAdapter(this));

        gridView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View v,
                    int position, long id) {

            if (previewView != null) {
                previewView.setBackgroundColor(BACKGROUNDCOLOR);
            }
            previewView = v;
            v.setBackgroundColor(HIGHLIGHTCOLOR);
            }
        });
    }
于 2013-01-26T19:07:49.033 に答える