2011-06-01 3 views
0

私は3列と3行私は、ユーザーが任意の2枚の画像をクリックすると画像を変更したいとの1つのGridViewコントロールを持っています。Image on Gridview Runtimeはどのように変更できますか?

たとえば、私は、最初の行1および列3画像をクリックして、第二に、私は3行と列の2ショー今私はどのようにそれが可能であるスワップのようなこの2枚の写真の画像を変更したいをクリックして? GridViewコントロール内の画像をSwaping

public class MainActivity extends Activity { 
    /** Called when the activity is first created. */ 
    GridView gridView; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     gridView = (GridView)findViewById(R.id.gridviewmy); 
     gridView.setAdapter(new ImageAdapter(this)); 
     final ImageAdapter im = new ImageAdapter(this); 
     gridView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { 
       // TODO Auto-generated method stub 
       int i=0; int j=0; 
       if(i != 0){ 
        j=arg2; 
        System.out.println("First Click "+j); 
       }else{ 
        i=arg2; 
        System.out.println("Second Click "+i); 
       } 
       im.getItem(arg2); 
       //im.changeImage(); 
       Toast.makeText(MainActivity.this, ""+arg2, Toast.LENGTH_SHORT).show(); 
       System.out.println("AdapterView "+arg0); 
       System.out.println("View "+arg1); 
       System.out.println("Integer "+arg2); 
       System.out.println("long "+arg3); 
      } 
     }); 
    } 
} 

class ImageAdapter extends BaseAdapter{ 
    private Context mContext; 
    ImageView iView; 
    public ImageAdapter(Context c){ 
     this.mContext = c; 
    } 
    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return mThumbIds.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     System.out.println("Item Is :-"+mThumbIds[position].toString()); 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     System.out.println("Geting Id of Item "+mThumbIds[position]); 
     if(iView != null){ 
     iView.setImageResource(mThumbIds[0]); 
     Toast.makeText(mContext, "Call", Toast.LENGTH_SHORT).show(); 
     } 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     if(convertView == null){ 
      iView = new ImageView(mContext); 
      iView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
      iView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      iView.setPadding(8,8,8,8); 
     }else{ 
      iView = (ImageView)convertView; 
     } 

      iView.setImageResource(mThumbIds[position]); 
      return iView; 
    } 
    private Integer[] mThumbIds = { 
      R.drawable.a_bhaibij, R.drawable.a_dashera,  R.drawable.a_dipawali, 
      R.drawable.a_gandhi, R.drawable.a_holi,   R.drawable.a_indepe, 
      R.drawable.a_janmastmi, R.drawable.a_kite,   R.drawable.a_newyear 
      }; 
    public void changeImage(){ 
      iView.setImageResource(mThumbIds[5]); 
    } 
} 

答えて

4

は、あなたがしなければならないsimple.What非常にある

1である*あなたがswapingを実行したいcliked位置を、保管してください。これらの2つの値を使用することにより

2 *がmThumbIdsアレイ上スワップ操作を行います。

3 *最後)(im.notifyDataSetChangedすなわちアダプタオブジェクトにnotifyDataSetChanged()メソッドを呼び出します。私はこれがあなたの問題を解決するかもしれないと思う

public class MainActivity extends Activity { 
/** Called when the activity is first created. */ 
int i=0; 
int firstClick,secondClick; 
GridView gridView; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    gridView = (GridView)findViewById(R.id.gridviewmy); 
    gridView.setAdapter(new ImageAdapter(this)); 
    final ImageAdapter im = new ImageAdapter(this); 
    gridView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { 
      // TODO Auto-generated method stub 
      i++; 
      if(i %2!=0){ 
       firstClick=arg2; 
      }else{ 
       secondClick=arg2; 
       Integer help=new Interger(mThumbIds[firstClick]); 
       mThumbIds[firstClick]=mThumbIds[secondClick]; 
       mThumbIds[secondClick]=help; 
       notifyDataSetChanged(); 
       System.out.println("Second Click "+i); 
      } 

     } 
    }); 
} 

}

class ImageAdapter extends BaseAdapter{ 
private Context mContext; 
ImageView iView; 
public ImageAdapter(Context c){ 
    this.mContext = c; 
} 
@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return mThumbIds.length; 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    System.out.println("Item Is :-"+mThumbIds[position].toString()); 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    System.out.println("Geting Id of Item "+mThumbIds[position]); 
    if(iView != null){ 
    iView.setImageResource(mThumbIds[0]); 
    Toast.makeText(mContext, "Call", Toast.LENGTH_SHORT).show(); 
    } 
    return 0; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 

    if(convertView == null){ 
     iView = new ImageView(mContext); 
     iView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
     iView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     iView.setPadding(8,8,8,8); 
    }else{ 
     iView = (ImageView)convertView; 
    } 

     iView.setImageResource(mThumbIds[position]); 
     return iView; 
} 
private Integer[] mThumbIds = { 
     R.drawable.a_bhaibij, R.drawable.a_dashera,  R.drawable.a_dipawali, 
     R.drawable.a_gandhi, R.drawable.a_holi,   R.drawable.a_indepe, 
     R.drawable.a_janmastmi, R.drawable.a_kite,   R.drawable.a_newyear 
     }; 

}

すべて最高です。

+0

greakやあ、おかげで、私は一つの質問私はImageAdapterclassでmThumbIds整数配列を宣言したときに(エラーを取得、その時点でMainActivityに試してみてもnotifyDataSetChangedを持っています)。どのようにそれを解決するエラーを得る? mainActivity内の –

+2

は、im.notifyDataSetChanged()を使用します。ここではimはImageAdapterのオブジェクトです –

3

はまた、スワップ操作を完了するために、グリッドビュー画像を更新するために次の操作を行います

im.notifyDataSetChanged(); 
gridView.setAdapter(im); 
gridView.invalidateViews() 
+1

ありがとうsatC、あなたに時間と答えを与えるため –

+1

グリッドの変更を正しく更新するためにこれらの線が必要です –

0

notifyDataSetChanged();私のために動作しませんでした。日食は間違いを起こした。 本当の解決策を探すのではなく、もし私がjavaページを再ロードしたばかりです。もちろん は、私は、グラフィックスという名前のファイルに内部ストレージにGridViewの(アダプタ)内の画像の状態を保存しています。したがって、Javaページのリロード時に、正しいイメージで再描画されます。 これは機能します。

関連する問題