2011-06-01 2 views
0

У меня есть один GridView с 3 колонками и 3 строками. Я хочу изменить изображение, когда пользователь нажимает любые два изображения.Как я могу изменить изображение на Ridtime Gridview?

для примера I Щелкните по первой строке 1 и столбцу 3 изображения, а во-вторых, я нажимаю на строки 3 и столбец 2, теперь я хочу изменить эти два изображения, например, поменять образ Как это возможно?

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

Swaping изображения в GridView очень simple.What вы должны сделать, это

1 * Храните cliked положение, в котором вы хотите выполнить swaping.

2 * Используя эти два значения, выполните операцию свопинга в массиве mThumbIds.

3 * Наконец, вызывается метод notifyDataSetChanged() объекта Adapter i.e im.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

hi greak, спасибо, у меня есть один вопрос: объявляю массив mThumbIds Integer в ImageAdapterclass и при попытке MainActivity в это время получить Error, а также notifyDataSetChanged(); получить ошибку, как ее решить? –

+2

в mainActivity use im.notifyDataSetChanged(); здесь im является объектом для ImageAdapter –

3

сделать также следующее для обновления просмотра сетки изображений для завершения операции своп:

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

спасибо satC, чтобы дать вам время и ответ –

+1

Нужно, чтобы эти строки обновляли изменения в сетке должным образом –

0

notifyDataSetChanged(); не работает для меня. eclipse дал ошибку. , поэтому вместо поиска реального решения, если он есть, я просто перезагрузил страницу java. Конечно, я сохраняю состояние изображений в gridview (адаптере) во внутренней памяти в файле с именем graphics. Поэтому при перезагрузке страницы java она перерисовывается с помощью правильных изображений. Это работает.

Смежные вопросы