Запуск Activity из метода

206
12 июля 2017, 23:22

Есть метод в 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. Как правильно нужно прописать, чтобы работало правильно.

Answer 1

лучше всего дабавить слушателя

примерно так:

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

Объявляете интерфейс:

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. Писал на коленке, но суть, думаю, ясна.

Answer 3

Вы создали новый объект активити, он поместился в новую ячейку в памяти, но, при этом, т.к. методы жизненнго цикла не были вызваны, то оно всё полностью неработающее.

Вам нужно получать уже действующий экземпляр активити. Например, скастовав контекст к нему.

MainActivity ma = (MainActivity) v.getContext();
ma.getPositionEdit(position);

А ещё лучше - реализовать в активити интейрфейс, прокинуть его в адаптер и в нужный момент его метод дёрнуть.

READ ALSO
Удалить тег из html

Удалить тег из html

Есть блок с текстом, в котором в некоторых местах есть brПри меньшей ширине окна текст принимает непрезентабельный вид и не выравнивается...

279
Нужно ли здесь использовать float?

Нужно ли здесь использовать float?

Посоветуйте, как правильно сверстать такой сайт, приведённый на рисунке? Интересует вопрос, нужно ли применять здесь float для блоков в шапке...

245
Много букв (обсуждения своего движка на PHP)

Много букв (обсуждения своего движка на PHP)

Добрый день Я как не профессионал в php начал писать свой движок и хотел бы уточнить для себя некоторые нюансы движка

252
Корректное извлечение текста из textarea

Корректное извлечение текста из textarea

ЗдравствуйтеУ меня есть поле для ввода текста, но когда я передаю его значение в переменную, то оно не совсем корректно передается

321