Пытаюсь получить данные из общих предпочтений в адаптер recylerview, но получаю context = null. Я также инициализировал контекст в адаптере. Я много искал, но ничего не помогло. Любой учебник или любая помощь будут оценены
вот мой адаптер: -
public class HomeFeaturedAdapter extends RecyclerView.Adapter<HomeFeaturedAdapter.HomeViewHolder> {
Context context;
public HomeFeaturedAdapter(List<Products> productList) {
this.context = context;
}
@NonNull
@Override
public HomeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.brand_adapter_row, parent, false);
return new HomeViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull HomeViewHolder homeViewHolder, int i) {
SharedPreferences preferences = context.getSharedPreferences("MyPref", MODE_PRIVATE);
String imageload = preferences.getString("permalink", null);
/*SharedPreferences sharedPrefs = ((HomeViewHolder) homeViewHolder).imageload.getContext().getSharedPreferences("MyData", Context.MODE_PRIVATE);*/
/*SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.context);
String imageload = sharedPreferences.getString("permalink", null);*/
if (imageload != null) {
Picasso.with(context).load(imageload).fit().into(homeViewHolder.imagesViews);
}
/*
homeViewHolder.view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AppCompatActivity activity = (AppCompatActivity) view.getContext();
Fragment myFragment = new ProductDetailsFragment();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.mainfraime, myFragment).addToBackStack(null).commit();
}
});
*/
}
@Override
public int getItemCount() {
return 10;
}
public class HomeViewHolder extends RecyclerView.ViewHolder {
public View view;
TextView productTitle;
ImageView imagesViews;
CardView brandCardview;
public HomeViewHolder(@NonNull View itemView) {
super(itemView);
this.view = itemView;
productTitle = itemView.findViewById(R.id.productTitle);
imagesViews = itemView.findViewById(R.id.imagesViews);
brandCardview = itemView.findViewById(R.id.brandCardview);
}
}
}
Если я добавлю контекст в конструктор, как это
`
public HomeFeaturedAdapter(Context context, List<Products> productList) {
this.context = context;
}
`
Я получаю свой домашний фрагмент error: constructor HomeFeaturedAdapter in class HomeFeaturedAdapter cannot be applied to given types;
HomeFeaturedAdapter adapter = new HomeFeaturedAdapter(productList);
Пожалуйста, помогите мне найти решение, которое я много пробовал в Google, но не понимал, что делать.




Вы добавили контекст в конструктор адаптера, поэтому при вызове этого конструктора из фрагмента или действия вам необходимо добавить контекст. Если вы вызываете его из вызова Activity
HomeFeaturedAdapter adapter = new HomeFeaturedAdapter(this, productList)
Из фрагмента вы можете вызвать
HomeFeaturedAdapter adapter = new HomeFeaturedAdapter(getActivity(), productList)
спасибо @ MorZa Теперь я получаю context = Mainactivity@4629, но изображение все еще не загружается в recylerview.
Попробуйте отладить и проверить (imageload! = Null)
HomeFeaturedAdapter adapter = new HomeFeaturedAdapter(productList)
Вы используете неправильный конструктор для создания объекта адаптера. Вы должны использовать этот
HomeFeaturedAdapter adapter = new HomeFeaturedAdapter(getContext(),productList);
Вы используете несколько конструкторов в адаптере, поэтому вы используете один без context, поэтому ваш context в адаптере имеет значение NULL.
Я использовал getContext(), это решило мою ошибку конструктора, но изображение не загружается в recyclerview.
Надеюсь, что это поможет вам. Это правильный код, я уже пробовал!
public class HomeFeaturedAdapter extends RecyclerView.Adapter<HomeFeaturedAdapter.HomeViewHolder> {
Context context;
public HomeFeaturedAdapter (Context context, List<Products> productList) {
this.context = context;
SharedPreferences preferences = context.getSharedPreferences("MyPref", MODE_PRIVATE);
}
@NonNull
@Override
public HomeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.brand_adapter_row, parent, false);
return new HomeViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull HomeViewHolder homeViewHolder, int i) {
String imageload = preferences.getString("permalink", null);
if (imageload != null) {
Picasso.with(context).load(imageload).fit().into(homeViewHolder.imagesViews);
}
}
@Override
public int getItemCount() {
return 10;
}
public class HomeViewHolder extends RecyclerView.ViewHolder {
public View view;
TextView productTitle;
ImageView imagesViews;
CardView brandCardview;
public HomeViewHolder(@NonNull View itemView) {
super(itemView);
this.view = itemView;
productTitle = itemView.findViewById(R.id.productTitle);
imagesViews = itemView.findViewById(R.id.imagesViews);
brandCardview = itemView.findViewById(R.id.brandCardview);
}
}
}
И в своем фрагменте сделайте так
HomeFeaturedAdapter adapter = new HomeFeaturedAdapter(getActivity(), productList);
не делайте этого, следует передавать список данных из активности в адаптер, потому что при прокрутке получить данные из SharePreference => низкий FPS