Использование общих переходов элементов из класса неактивности в класс активности

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

Вот мой код (RecyclerViewAdapter.java):

открытый класс RVAdapter расширяет RecyclerView.Adapter {

public static class PersonViewHolder extends RecyclerView.ViewHolder {


    CardView cv;
    TextView personName;
    TextView personAge;
    ImageView personPhoto;
    TextView myid;
    front ft = new front();

    PersonViewHolder(View itemView) {
        super(itemView);
        personName = (TextView)itemView.findViewById(R.id.person_name);
        personAge = (TextView)itemView.findViewById(R.id.person_age);
        personPhoto = (ImageView)itemView.findViewById(R.id.person_photo);
        myid = (TextView)itemView.findViewById(R.id.IDTAG);
        cv = (CardView)itemView.findViewById(R.id.cv);
        cv.setUseCompatPadding(true);
        cv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


                final String cardid = myid.getText().toString().trim();
                Intent callIntent = new Intent("io.brushed.databasecardview.VIEWDATAINSIDE");
                callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                callIntent.putExtra("THEID",cardid);
                String transitionName = "oktrans";
                ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this,
                        personPhoto,   // The view which starts the transition
                        transitionName    // The transitionName of the view we’re transitioning to
                );
                ActivityCompat.startActivity(this, callIntent, options.toBundle());

            }
        });



    }
}

List<Person> persons;

RVAdapter(List<Person> persons){
    this.persons = persons;
}

@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
}

@Override
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
    PersonViewHolder pvh = new PersonViewHolder(v);
    return pvh;
}

@Override
public void onBindViewHolder(PersonViewHolder personViewHolder, int i) {
    personViewHolder.myid.setText(persons.get(i).id);
    personViewHolder.personName.setText(persons.get(i).name);
    personViewHolder.personAge.setText(persons.get(i).age);
    personViewHolder.personPhoto.setImageResource(persons.get(i).photoId);
}
@Override
public int getItemCount() {
    return persons.size();
}

}

Он не может разрешить ключевое слово "this", чем я должен заменить его, так как адаптер RecyclerView является неактивным классом?

2 ответа

Вы можете передать контекст вашего класса активности вашему неактивному классу (в частности, адаптеру RecyclerView, содержащему просмотры карт)

например

RecyclerViewAdapter1(Context context...)

Затем используйте этот контекст для этой цели:

String transitionName = "oktrans";
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this,
personPhoto,transitionName);
ActivityCompat.startActivity(context, callIntent, options.toBundle());  

Редактировать:

На основании вашего нового редактирования.

Передайте активность в качестве аргумента.

PersonalViewHolder(View view, Activity activity) {
...
ActivityCompat.startActivity(activity, ...);
}

public static class PersonViewHolder extends RecyclerView.ViewHolder {


CardView cv;
TextView personName;
TextView personAge;
ImageView personPhoto;
TextView myid;
front ft = new front();

PersonViewHolder(View itemView, final Context context) {
    super(itemView);
    personName = (TextView)itemView.findViewById(R.id.person_name);
    personAge = (TextView)itemView.findViewById(R.id.person_age);
    personPhoto = (ImageView)itemView.findViewById(R.id.person_photo);
    myid = (TextView)itemView.findViewById(R.id.IDTAG);
    cv = (CardView)itemView.findViewById(R.id.cv);
    cv.setUseCompatPadding(true);
    cv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


            final String cardid = myid.getText().toString().trim();
            Intent callIntent = new Intent("io.brushed.databasecardview.VIEWDATAINSIDE");
            callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            callIntent.putExtra("THEID",cardid);
            String transitionName = "oktrans";
            ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(context,
                    personPhoto,   // The view which starts the transition
                    transitionName    // The transitionName of the view we’re transitioning to
            );
            ActivityCompat.startActivity(context, callIntent, options.toBundle());

        }
    });



}

}

List<Person> persons;

RVAdapter(List<Person> persons){
this.persons = persons;
}

@Override
 public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
 }

 @Override
 public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i)   {
   View v =    LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,   viewGroup, false);
   PersonViewHolder pvh = new PersonViewHolder(v, viewGroup.getContext());
  return pvh;
 }

@Override
public void onBindViewHolder(PersonViewHolder personViewHolder, int i)    {
personViewHolder.myid.setText(persons.get(i).id);
personViewHolder.personName.setText(persons.get(i).name);
personViewHolder.personAge.setText(persons.get(i).age);
personViewHolder.personPhoto.setImageResource(persons.get(i).photoId);
}
@Override
public int getItemCount() {
return persons.size();
}

}

Вы не можете использовать this потому что вы находитесь внутри блока, который содержит ссылку на него.

Также, если вы видите правильную реализацию метода startActivity().

Для этого нужны следующие аргументы:

startActivity(Activity activity, Intent intent, Bundle options)

Передайте свою активность как ActivityName.this или же getActivity() если во фрагменте

Редактировать:

На основании вашего нового редактирования.

Передайте активность в качестве аргумента.

PersonalViewHolder(View view, Activity activity) {
...
ActivityCompat.startActivity(activity, ...);
}
Другие вопросы по тегам