2014-12-08 1 views
0

내 getList 메서드에 setOnClickListener를 구현하여 내 ArrayList에 제품을 추가했지만 getView 내부에서 OnClick 메서드를 호출 할 때 클래스가 itemClicked 메서드를 인식하지 못합니다.OnclickListener가 컨텍스트 메서드를 인식하지 못합니다.

어댑터 :

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); 
    } 

답변

2

당신이 당신의 컨텍스트를 캐스팅해야 할 적이 있습니까?

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

건배

+0

그것은했다! 감사! btw, itemclicked 메서드 안에, 내 목록에 produto를 추가하려고 할 때 _produtos_pedidos_, 응용 프로그램이 멈 춥니 다. 제대로 처리하고 있는지 확실하지 않습니다 ... 팁이 있습니까? –

+1

productos_pedidos.get (0)은 null입니다 (아직 추가되지 않음). 대신 produtos_pedidos.add (addProduto (produto_1))가 될 수 있습니까? 어쨌든 그것이 당신의 문제인지 확실하지 않습니다. – Buendiadas

관련 문제