2015-06-30 3 views
0

У меня есть GridView с пользовательскими ячейками (ячейки содержат TextView, ImageView и Button). Это мой обычай Adapter класс для GridView:Добавить действие к кнопке, созданной внутри GridView в Java

public class CustomGridViewAdapter extends ArrayAdapter<Item> { 
Context context; 
int layoutResourceId; 
int test; 
ArrayList<Item> data = new ArrayList<Item>(); 

public CustomGridViewAdapter(Context context, int layoutResourceId, 
    ArrayList<Item> data) { 
    super(context, layoutResourceId, data); 
    this.layoutResourceId = layoutResourceId; 
    this.context = context; 
    this.data = data; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    RecordHolder holder = null; 
    test = position; 

    if (row == null) { 
    LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
    row = inflater.inflate(layoutResourceId, parent, false); 

    holder = new RecordHolder(); 
    holder.txtTitle = (TextView) row.findViewById(R.id.item_text); 
    holder.imageItem = (ImageView) row.findViewById(R.id.item_image); 
    holder.action = (Button) row.findViewById(R.id.item_action); 
    row.setTag(holder); 
    } else { 
    holder = (RecordHolder) row.getTag(); 
    } 

    Item item = data.get(position); 

    holder.txtTitle.setText(item.getTitle()); 

    Picasso.with(getContext()).load(item.getImageUrl()).into(holder.imageItem); 

    holder.action.setOnClickListener(new Button.OnClickListener() { 
     public void onClick(View v) { 
      Toast.makeText(getContext(), "Posizione: "+ position, Toast.LENGTH_LONG).show(); 
     } 
    }); 

    return row; 

} 

static class RecordHolder { 
    TextView txtTitle; 
    ImageView imageItem; 
    Button action; 

} 
} 

Я получаю текст и изображение из массива, который я передаю от моей деятельности, и теперь я хочу, чтобы добавить конкретные действия для каждой кнопки, но я не могу поймите, как это сделать. Например, что мне делать, если я хочу вызвать метод внутри моего действия нажатием кнопки?

EDIT:

Я объявил позицию Final и как при нажатии на кнопку Toast показывает правильное положение, теперь мне нужно знать, как вызвать метод из моего MainActivity, когда кнопка получает щелкнул

ответ

0

Не уверен, как Android Жизненный цикл влияет прямо на Java конвенции, но если зарегистрировать новый экземпляр OnClickListener для каждой кнопки, каждый вызов метода будет выдано на основании текущей кнопки нажата. Если вы беспокоитесь о вызовах и параметрах метода, вы можете расширить OnClickListener. Что-то вроде этого, может быть:

private class MyListener extends View.OnClickListener { 

    param1, param2, paramN...; 

    public MyListener(arg1, arg2, argN...) { 
      //set vars 
    } 

    @Override 
    public void onClicked(ClickEvent theEvent) { 
     //do work with your unique parameters for that listener 

     //Call back to a method contained within your class as you wanted. 


    } 

} 
Смежные вопросы