Запуск нового Activity из Adapter
Мне надо запустить Activity из Adapter. В моем коде подсвечивает красным строку с кодом startActivity(intent).
Код адаптера(сжатый):
public class MultiTypeTaskAdapter extends MultiTypeExpandableRecyclerViewAdapter<MultiTypeTaskAdapter.TaskViewHolder,
MultiTypeTaskAdapter.SubtaskViewHolder> {
class TaskViewHolder extends GroupViewHolder {
private int viewType;
private ImageButton imageButton;
public TaskViewHolder(View itemView, int viewType) {
super(itemView);
this.viewType = viewType;
}
public void bind(final Task task, int viewType, final int parent) {
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (parent){
case PARENT_HOME:
showPopup(v, PARENT_HOME);
break;
case PARENT_COMPLETED:
deleteTask(v, PARENT_COMPLETED);
break;
}
}
public void showPopup(final View v, final int parent) {
PopupMenu popup = new PopupMenu(v.getContext(), imageButton);
popup.getMenuInflater().inflate(R.menu.menu_for_tasks, popup.getMenu());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.edit:
Intent intent = new Intent(v.getContext(), AddActivity.class);
startActivity(intent);
break;
case R.id.delete:
deleteTask(v, parent);
break;
}
return false;
}
});
popup.show();
}
});
}
}
@Override
public void onBindGroupViewHolder(com.example.arraylist.MultiTypeTaskAdapter.TaskViewHolder holder, int flatPosition, ExpandableGroup group) {
int viewType = getGroupViewType(flatPosition, group);
final Task task = (Task) group;
holder.bind(task, viewType, parent);
}
}
Ответы (1 шт):
Автор решения: katso
→ Ссылка
startActivity(Intent) является методом класса Context, Activity наследует Context и этот метод внутри нее вызвать можно, в отличие от адаптера, который знать не знает про startActivity
Как верно заметил @Andrew, можно передать в конструктор адаптера Context и у него вызвать метод. Можно в конструктор передать слушатель и дергать его, а в активити уже вызывать startActivity