Ошибка при смене языка из адаптера
В RecyclerView список с CardView при нажатии на них должна происходить смена языка в приложении, но у меня приложение крашиться(
Ошибка в логах при нажатии
Process: com.example.funtura_new, PID: 12607
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
at com.example.funtura_new.MainFragments.Home.Settings.Language.Adapter_Language.lambda$onBindViewHolder$0$Adapter_Language(Adapter_Language.java:74)
at com.example.funtura_new.MainFragments.Home.Settings.Language.-$$Lambda$Adapter_Language$xquXjKmFLQD4_NGgPzac5zGONcY.onClick(lambda)
at android.view.View.performClick(View.java:5692)
at android.view.View$PerformClick.run(View.java:22596)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6397)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:939)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:829)
Изначально код для смены языка был такой
Locale locale = new Locale("ru");
Locale.setDefault(locale);
Configuration config = getBaseContext().getResources().getConfiguration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
Но так как я использую его в Adapter то пришлось поменять getBaseContext() на Context.
public class Adapter_Language extends RecyclerView.Adapter<Adapter_Language.AttractionsViewHolder> {
public ArrayList<Item_Language> mItem_Language;
Context mContext;
Locale locale = new Locale("ru");
public Adapter_Language(ArrayList<Item_Language> favList, Context context) {
mItem_Language = favList;
mContext = context;
}
@NonNull
@Override
public AttractionsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_language, parent, false);
return new AttractionsViewHolder(v);
}
public static class AttractionsViewHolder extends RecyclerView.ViewHolder {
public ImageView iv_language;
public TextView tv_language;
public CardView cv_language;
public AttractionsViewHolder(View itemView) {
super(itemView);
iv_language = itemView.findViewById(R.id.iv_language);
tv_language = itemView.findViewById(R.id.tv_language);
cv_language = itemView.findViewById(R.id.cv_language_);
}
}
@Override
public void onBindViewHolder(AttractionsViewHolder holder, int position) {
Item_Language currentItem = mItem_Language.get(position);
holder.getAdapterPosition();
holder.cv_language.setOnClickListener(v -> {
switch(currentItem.getInitialPositon()){
case 0:{
Locale locale = new Locale("uk");
Locale.setDefault(locale);
Configuration config = mContext.getResources().getConfiguration();
config.locale = locale;
mContext.getResources().updateConfiguration(config,
mContext.getResources().getDisplayMetrics());
break;
}
case 1: {
locale = new Locale("en");
break;
}
}
});
}
@Override
public int getItemCount() {
return mItem_Language.size();
}
}
Помогите исправить
DialogFragment откуда создаётся адаптер
public class DialogLanguage extends DialogFragment {
OnBackPressedCallback callback;
static ArrayList<Item_Language> mList_Language;
Context context;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.dialog_language, container, false);
CardView close_dlang = view.findViewById(R.id.close_dlang);
callback = new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed()
{
callback.setEnabled(false);
}
};
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
close_dlang.setOnClickListener(v -> dismiss());
RecyclerView r_language = view.findViewById(R.id.r_language);
mList_Language = new ArrayList<>();
Adapter_Language Adapter_Language= new Adapter_Language(mList_Language, context);
RecyclerView.LayoutManager RLM_Language;
RLM_Language = new LinearLayoutManager(getActivity());
r_language.setHasFixedSize(true);
r_language.setLayoutManager(RLM_Language);
r_language.setAdapter(Adapter_Language);
CreateAttractions();
return view;
}
public static void CreateAttractions()
{
mList_Language.add(new Item_Language(R.mipmap.ic_launcher,"awdawd", 0));
mList_Language.add(new Item_Language(R.mipmap.ic_launcher,"awdawd", 1));
mList_Language.add(new Item_Language(R.mipmap.ic_launcher,"awdawd", 2));
}
}