Android 如何使用RecyclerView从适配器类完成活动

Android 如何使用RecyclerView从适配器类完成活动,android,android-recyclerview,adapter,Android,Android Recyclerview,Adapter,我试图在单击Recyclerview项时完成适配器类中的活动 使用代码 public void onBindViewHolder(@NonNull CountryCodeAdapter.CountryViewHolder holder, int position{ CountryModel countryMode = countryModels.get(position); final String cCode = countryModel.getName(); hold

我试图在单击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
这样做:

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();
          }
        }
    });

在适配器构造函数中获取活动实例:

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

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

  }

在recyclerView中创建一个接口回调,在活动中实现该方法,并在单击项时调用该方法

// in your recyclerView
public interface RecyclerViewCallback {
        void onItemClick(Item item)
}
// in your activity
@Override
void onItemClicked(Item item) {
        this.finish();
}
在适配器类中为适配器创建一个接口,如下所示:

public interface YourAdapterInteraction {
        void onClickCountryCode();
 }
让您的活动实现您的界面,如下所示:

public class YourActivity extends AppCompatActivity implements YourAdapter.YourAdapterInteraction
在您的活动中:


将活动保留在字段中不是最好的方法-可能会导致泄漏最好的方法是为适配器创建回调,并在使用此回收服务的片段/活动中完成活动。您无法保证视图的上下文始终是活动。这可能会在API 19上崩溃,因为视图的直接上下文是ContextThemeWrapper。请看,这仅适用于活动,如果您使用的是fragment,那么它将发生。答案是从2011年开始的,并且是在android.support.v4开始添加向后兼容性主题支持之前添加的。
@Override
    public void onClickCountryCode() {
        Intent i = new 
        Intent(this,RegisterActivity.class);
        i.putExtra("countryCode", cCode);
        startActivity(i);
        finish();
 }