#android
#Android
Вопрос:
У меня есть один GridView с 3 столбцами и 3 строками, я хочу изменить изображение, когда пользователь нажимает на любые два изображения.
например, я нажимаю сначала на изображение строки 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]);
}
}
Ответ №1:
Поменять местами изображения в GridView очень просто.Что вам нужно сделать, это
1* Сохраните выбранную позицию, в которой вы хотите выполнить замену.
2* Используя эти два значения, выполните операцию подкачки в массиве mThumbIds.
3* Наконец, вызовите метод notifyDataSetChanged () для объекта адаптера, т.е. 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
};
}
Я думаю, это может решить вашу проблему.
Всего наилучшего.
Комментарии:
1. привет, спасибо, у меня есть один вопрос: я объявляю целочисленный массив mThumbIds в ImageAdapterclass и при попытке MainActivity в это время получаю ошибку, а также notifyDataSetChanged (); получаю ошибку, как ее устранить?
2. в MainActivity используйте im.notifyDataSetChanged(); здесь im является объектом для ImageAdapter
Ответ №2:
Также выполните следующие действия для обновления изображений в виде сетки, чтобы завершить операцию подкачки:
im.notifyDataSetChanged();
gridView.setAdapter(im);
gridView.invalidateViews()
Ответ №3:
notifyDataSetChanged();
у меня не сработало. eclipse выдал ошибку. поэтому вместо поиска реального решения, если оно есть, я просто перезагрузил страницу Java. Конечно, я сохраняю состояние изображений в gridview (адаптере) во внутреннем хранилище в файле с именем graphics. Итак, при перезагрузке страницы Java она перерисовывается с правильными изображениями. Это работает.