OnclickListener无法识别上下文方法

时间:2014-12-08 19:40:11

标签: java android

我在getView方法中实现了一个setOnClickListener,将一个产品添加到我的ArrayList中,但是当我在getView中调用OnClick方法时,我的类没有识别方法itemClicked。

适配器:

public class GridAdapter extends BaseAdapter{

    private Context ctx;
    private ArrayList<Produto> list ;

    GridAdapter(Context context, ArrayList<Produto> s){
        this.ctx = context;
        this.list = s;
    }

@Override
public View getView(int position, View convertiew, ViewGroup parent) {

View grid;
LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

if (convertiew == null){

    grid = new View(ctx);

    grid = inflater.inflate(R.layout.grid_row, null);
    TextView textView = (TextView) grid.findViewById(R.id.tv_gridrow);
    ImageView imageView = (ImageView)grid.findViewById(R.id.img_gridrow);
    textView.setText(list.get(position).getNome());
    imageView.setImageResource(list.get(position).getImagem());
    imageView.setAdjustViewBounds(true);

        imageView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
               ctx.itemClicked(position);
            }
        });

    } else {
        grid = (View) convertiew;
}
return grid;

}

MainActivity

public class MainActivity extends Activity {

    private ArrayList<Produto> array_produtos;
    private ArrayList<Pedido> produtos_pedidos;
    private int numero_pedidos;
    private Produto produto_1;
    private Produto produto_2;
    private Produto produto_3;
    private Produto produto_4;
    private Produto produto_5;
    private Pedido pedido_1;
    private TextView apresenta_total;
    private GridView gv;
    private ListView lv;

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

        array_produtos = new ArrayList<Produto>();
        produtos_pedidos = new ArrayList<Pedido>();
        numero_pedidos=0;

        //Inicialização dos produtos
        produto_1 = new Produto(1, "Café",0.60,4,4,R.drawable.cafe1);
        produto_2 = new Produto(2, "Água", 0.90,3,2, R.drawable.luso1);
        produto_3 = new Produto(3, "Sopa", 1.20,2,5, R.drawable.sopa3);
        produto_4 = new Produto(4, "Cerveja", 1.00,5,4, R.drawable.fino2);
        produto_5 = new Produto(5, "Coca-cola", 1.10, 3,2, R.drawable.coca_cola1);

        array_produtos.add(produto_1);
        array_produtos.add(produto_2);
        array_produtos.add(produto_3);
        array_produtos.add(produto_4);
        array_produtos.add(produto_5);


        pedido_1 = new Pedido(); //cria primeiro pedido
        produtos_pedidos.add(pedido_1); //Atribui à lista de pedidos

        gv = (GridView)findViewById(R.id.gv_produtos);
        lv = (ListView) findViewById(R.id.lv_produtos_pedidos);

        gv.setAdapter(new GridAdapter(this, array_produtos));

        ArrayAdapter<Pedido> arrayAdapter = new ArrayAdapter<Pedido>(this, android.R.layout.simple_list_item_1,produtos_pedidos);

        lv.setAdapter(arrayAdapter);

    }

    public void itemClicked(int position) {
        produtos_pedidos.get(0).addProduto(produto_1);
    }

1 个答案:

答案 0 :(得分:2)

您是否尝试投射您的背景?

 @Override
            public void onClick(View v) {
               if(ctx instanceof MyActivity){
                ((MyActivity)ctx).itemClicked(int position);
            }

干杯