Как завершить занятие из класса Adapter с помощью RecyclerView - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь завершить действие из класса адаптера, нажимая элемент Recyclerview, используя код

public void onBindViewHolder(@NonNull CountryCodeAdapter.CountryViewHolder holder, int position{
    CountryModel countryMode = countryModels.get(position);
    final String cCode = countryModel.getName();
    holder.llcountryCode.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(v.getContext(),RegisterActivity.class);                        
            i.putExtra("countryCode", cCode);
            v.getContext().startActivity(i);
            ((AppCompatActivity)context).finish();
        }
    }
}

Также попытался, но это не сработало

((Activity)context).finish();

И я получаюэта ошибка:

cannot be cast to android.support.v7.app.AppCompatActivity

Ответы [ 4 ]

0 голосов
/ 17 октября 2018

Создайте interface для адаптера (внутри класса адаптера) следующим образом:

public interface YourAdapterInteraction {
        void onClickCountryCode();
 }

Сделайте Activity implement вашим interface, например:

public class YourActivity extends AppCompatActivity implements YourAdapter.YourAdapterInteraction

Внутри YourActivity:

@Override
    public void onClickCountryCode() {
        Intent i = new 
        Intent(this,RegisterActivity.class);
        i.putExtra("countryCode", cCode);
        startActivity(i);
        finish();
 }
0 голосов
/ 17 октября 2018

получить экземпляр действия в конструкторе адаптера:

 public class MyAdapter extends IAdapter<RecyclerView.ViewHolder,MyDS> {
    private Activity activity;

    public MyAdapter(Activity activity) {
        this.activity = activity;
    }

  }
0 голосов
/ 17 октября 2018

Создайте обратный вызов интерфейса внутри вашего recyclerView, внедрите метод в свою деятельность и вызывайте метод при нажатии на элемент.

// in your recyclerView
public interface RecyclerViewCallback {
        void onItemClick(Item item)
}
// in your activity
@Override
void onItemClicked(Item item) {
        this.finish();
}
0 голосов
/ 17 октября 2018

Сделайте это:

public void onBindViewHolder(@NonNull                                                                                     
    CountryCodeAdapter.CountryViewHolder holder, int position{
      CountryModel countryModel = countryModels.get(position); 

      final String name = countryModel.getName();

      holder.llcountryCode.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        Intent i = new Intent(context,RegisterActivity.class);
        i.putExtra("countryCode", cCode);
        context.startActivity(i);
        ((Activity)context).finish();
          }
        }
    });

вместо:

Public void onBindViewHolder(@NonNull                                                                                     
    CountryCodeAdapter.CountryViewHolder holder, int position{
      CountryModel countryModel = countryModels.get(position); 

      final String name = countryModel.getName();

      holder.llcountryCode.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        Intent i = new 
        Intent(v.getContext(),RegisterActivity.class);
        i.putExtra("countryCode", cCode);
        v.getContext().startActivity(i);
        ((AppCompatActivity)context).finish();
          }
        }
    });
...