android - gridview 点击item的时候 SetImageResource 更换imageview失败
PHP中文网
PHP中文网 2017-04-17 17:47:57
[Android讨论组]

如题, 我想通过点击gridview下的item而更改他的imageview。 不过点击了没有反应。 有没有大神知道怎么回事?

public class table extends AppCompatActivity implements AdapterView.OnItemClickListener{

GridView gridView;
my_adapter my_adapter;
String table_names[]={"1a","1b","1c","1d","2a","2b","2c","2d","3a","3b","3c","3d"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_table);

    gridView=(GridView)findViewById(R.id.gridview);
    my_adapter=new my_adapter(this,table_names);
    gridView.setAdapter(my_adapter);
    gridView.setOnItemClickListener(this);
}

@Override
public void onItemClick(final AdapterView adapterView, final View view, final int i, long l) {

    new AlertDialog.Builder(this)
            .setTitle("Table number: "+adapterView.getItemAtPosition(i).toString())
            .setMessage("Open Table?")
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    my_adapter.change_img(); // 更换新的图片

                }
            })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    my_adapter.change_img2(); // 更换回原来的图片
                }
            })
            .show();
}
}

class my_adapter extends BaseAdapter{

ImageView imageView;
LayoutInflater inflater=null;
Context ctx;
String table_names[];
ArrayList store_table_no;

my_adapter(Context ctx, String table_names[]){
    this.ctx=ctx;
    this.table_names=table_names;
    store_table_no=new ArrayList();
    for (int i=0;i

single.xml








PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
ringa_lee
public void change_img(){
    imageView.setImageResource(R.drawable.table_full);
}

public void change_img2(){
    imageView.setImageResource(R.drawable.table3d2);
}

你这两个方法里面的imageView不是当前item对应的ImageView

正确的做法应该是在

@Override
public void onItemClick(final AdapterView<?> adapterView, final View view, final int i, long l) {
    // 找到被点击的item中的iamgeView
    final View imageView = view.findViewById(R.id.imageView);
    new AlertDialog.Builder(this)
            .setTitle("Table number: "+adapterView.getItemAtPosition(i).toString())
            .setMessage("Open Table?")
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if(imageView != null && (imageView instanceOf ImageView)) {// 检查防止报错
                        ((ImageView)imageView).setImageResource(R.drawable.table_full);
                    }
                }
            })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //同上
                }
            })
            .show();
    }
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号