0

MyGridViewは my onCreatehere で作成されます:

@Override
    protected void onCreate(Bundle savedInstanceState) {

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

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));
...

ImageAdapterのクラスには、.png ファイルへint[]の参照の「画像」が含まれています。R.drawable.私は onItemClickListener をさらに下に持っています。これはonCreate、どこでいつ触れられたかに応じてgridview、「画像」配列を更新します。多くの余分なコードが取り除かれると、次のようになります。

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

                while (count <= 6) {
...
                    if (count == 2 && verifyEmpty == false
                            && choosePiece == true && chooseEmpty == true) {
                        verifyEmpty = gc.checkEmptyChoice(position);
                        if (verifyEmpty == true) {
                            gc.moveToEmpty(position, gameBoardModel,
                                    (ImageView) v, selectedLocation);
                            count++;
                            // UPDATE THE GRIDVIEW SOMEHOW HERE.
                        }
                        break;
                    }
...

ネストされた の内側のgridview後に右を更新したい。そのすぐ上のメソッドは、配列に変更を加えます。それらの変更を に反映させたいと思いcount++ifgc.moveToEmpty(...)imagesgridviewます。notifyDataSetChanged()andを使用しようとしinvalidateViewsましたが、どちらも my 内から機能させることはできませんonItemClickListener

-------------------解決策--------------以下の回答から-------------- ----

ImageAdapter に名前を追加する必要がありました。

@Override
    protected void onCreate(Bundle savedInstanceState) {

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

        final ImageAdapter iA = new ImageAdapter(this);

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(iA);
...

が使用できるように最終的である必要がありましonClick...た。次に、次のように参照できます。

                    if (verifyEmpty == true) {
                        gc.moveToEmpty(position, gameBoardModel,
                                (ImageView) v, selectedLocation);
                        count++;
                        // UPDATE THE GRIDVIEW SOMEHOW HERE.
                        // LIKE THIS!
                        iA.notifyDataSetChanged();
                    }
4

1 に答える 1

2

への参照を保存してから、notifyDataSetChangedImageAdapterを呼び出します。

imageAdapter.notifyDataSetChanged()

基になるデータが変更され、更新する必要があることをアダプターに通知します。

于 2013-04-28T04:45:42.643 に答える