Есть метод в MainActivity
:
public void getPositionEdit(int position) {
Intent intent = new Intent(this, addNote.class);
intent.putExtra("position", position);
intent.putStringArrayListExtra("notes", array);
startActivityForResult(intent, 1);
}
Есть адаптер, в котором прослушиваются нажатия на компоненты RecyclerView
:
public void onBindViewHolder(final ViewHolder holder, final int position) {
holder.mTextView.setText(array.get(position));
holder.mTextView.setOnClickListener (new View.OnClickListener() {
@Override
public void onClick(View v)
MainActivity ma = new MainActivity();
ma.getPositionEdit(position);
}
});
}
После нажатие на компонент, должна считываться его позиция и передаваться в метод MainActivity
, в котором будет запускать новое Activity
. Как правильно нужно прописать, чтобы работало правильно.
лучше всего дабавить слушателя
примерно так:
Activity implements ItemClickListener {
/////
adapterRececlerView.setClickListener(this);
///////
@Override
public void onItemClick(View view, int position) {
Intent intent = new Intent(this, addNote.class);
intent.putExtra("position", position);
intent.putStringArrayListExtra("notes", array);
startActivityForResult(intent, 1);
}
}
часть кода адаптера:
public class AdapterImageRV extends RecyclerView.Adapter<AdapterImageRV.ViewHolder> {
private ItemClickListener mClickListener;
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public ViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
}
}
///////////////
public void setClickListener(ItemClickListener itemClickListener) {
this.mClickListener = itemClickListener;
}
// parent activity will implement this method to respond to click events
public interface ItemClickListener {
void onItemClick(View view, int position);
}}
Объявляете интерфейс:
public interface OnRecyclerViewItemClickListener {
void onItemClicked(int position);
}
Реализуете этот интерфейс в активити:
public class SomeActivity extends AppCompatActivity implements OnRecyclerViewItemClickListener {
// ...
@Override
public void onItemClicked(int position){
// some actions
}
}
Добавляете поле и сеттер в адаптер:
public class SomeAdapter extends RecyclerView.Adapter<SomeViewHolder> {
private OnRecyclerViewItemClickListener mOnRecyclerViewItemClickListener;
// ...
public void setListener(OnRecyclerViewItemClickListener onRecyclerViewItemClickListener) {
mOnRecyclerViewItemClickListener = onRecyclerViewItemClickListener;
}
}
При создании адаптера устанавливаете листнер:
SomeAdapter someAdapter = new SomeAdapter();
someAdapter.setListener(this);
И далее из адаптера вызываете метод onItemClicked(...)
:
if (mOnRecyclerViewItemClickListener != null) {
mOnRecyclerViewItemClickListener.onItemClicked(position);
}
PS. Писал на коленке, но суть, думаю, ясна.
Вы создали новый объект активити, он поместился в новую ячейку в памяти, но, при этом, т.к. методы жизненнго цикла не были вызваны, то оно всё полностью неработающее.
Вам нужно получать уже действующий экземпляр активити. Например, скастовав контекст к нему.
MainActivity ma = (MainActivity) v.getContext();
ma.getPositionEdit(position);
А ещё лучше - реализовать в активити интейрфейс, прокинуть его в адаптер и в нужный момент его метод дёрнуть.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть блок с текстом, в котором в некоторых местах есть brПри меньшей ширине окна текст принимает непрезентабельный вид и не выравнивается...
Посоветуйте, как правильно сверстать такой сайт, приведённый на рисунке? Интересует вопрос, нужно ли применять здесь float для блоков в шапке...
Добрый день Я как не профессионал в php начал писать свой движок и хотел бы уточнить для себя некоторые нюансы движка
ЗдравствуйтеУ меня есть поле для ввода текста, но когда я передаю его значение в переменную, то оно не совсем корректно передается