Android的dialog 不能使用application中的context,但是要再非activity类中调用该怎么办,求解
非activity类也是从activity类创建使用的,构造函数加上context参数,new对象的时候穿参
public static静态方法调用也是传参context
如 7166丶小贤 说的方法可以。但在非activity类中调用dialog,你的业务设计就不太合理,交互性的操作还是要放在Activity里。
适配器也是一个类,在构造方法中传入上下文进去即可。
public class ListAdapter extends RecyclerView.Adapter<ListAdapter.Holer> {
private Context context;
private List<Data> dataList;
//构造方法传入上下文
public ListAdapter(Context context,List<Data> dataList){
this.context=context;
this.dataList=dataList;
}
@NonNull
@NotNull
@Override
public ListAdapter.Holer onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item_list, parent, false);
return new ListAdapter.Holer(view);
}
@Override
public void onBindViewHolder(@NonNull @NotNull Holer holder, int position) {
}
@Override
public int getItemCount() {
return dataList.size();
}
public class Holer extends RecyclerView.ViewHolder {
public Holer(@NonNull View itemView) {
super(itemView);
}
}
}
要学会合理利用接口来进行回调。在适配中新增一个接口
interface OnRvItemLongClickListener{
void onRvItemLongClick(....)
}
适配器新增 private OnRvItemLongClickListener mListener;
适配器新增方法
public void setOnRvItemLongClickListener(OnRvItemLongClickListener listener){
this.mListener=listener;
}
这样在相应的 Activity 或者 Fragment 使用适配器时就能回调出 item 的长按事件监听了。