【问题标题】:How can I change Image on Gridview Runtime?如何在 Gridview 运行时更改图像?
【发布时间】:2011-11-26 18:09:34
【问题描述】:

我有一个 3 列和 3 行的 GridView,我想在用户单击任意两个图像时更改图像。

例如,我单击第一行第 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]);
    }
}

【问题讨论】:

    标签: android


    【解决方案1】:

    在GridView中交换图片很简单,你要做的就是

    1* 存储你想要执行交换的点击位置。

    2* 通过使用这两个值对 mThumbIds 数组执行交换操作。

    3* 最后调用Adapter对象的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
            };
    

    }

    我认为这可能会解决你的问题。

    一切顺利。

    【讨论】:

    • 你好,谢谢,我有一个问题,我在 ImageAdapterclass 中声明 mThumbIds 整数数组,当尝试 MainActivity 时出现错误并且还 notifyDataSetChanged();报错怎么解决?
    • 在 mainActivity 中使用 im.notifyDataSetChanged();这里 im 是 ImageAdapter 的对象
    【解决方案2】:

    还可以执行以下操作来更新网格视图图像以完成交换操作:

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

    【讨论】:

      【解决方案3】:

      notifyDataSetChanged(); 对我不起作用。日食给出了一个错误。 所以与其寻找真正的解决方案,如果有的话,我只是重新加载了java页面。 当然,我将gridview(适配器)中图像的状态保存在名为graphics的文件中的内部存储中。因此,在重新加载 java 页面时,它会使用正确的图像重新绘制。 它有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-07
        • 1970-01-01
        • 2012-03-22
        相关资源
        最近更新 更多