Как получить данные из общих настроек в адаптер RecylerView и перейти к следующему фрагменту

Пытаюсь получить данные из общих предпочтений в адаптер 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, но не понимал, что делать.

не делайте этого, следует передавать список данных из активности в адаптер, потому что при прокрутке получить данные из SharePreference => низкий FPS

vuhung3990 25.12.2018 10:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
204
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы добавили контекст в конструктор адаптера, поэтому при вызове этого конструктора из фрагмента или действия вам необходимо добавить контекст. Если вы вызываете его из вызова Activity

 HomeFeaturedAdapter adapter = new HomeFeaturedAdapter(this, productList)

Из фрагмента вы можете вызвать

HomeFeaturedAdapter adapter = new HomeFeaturedAdapter(getActivity(), productList)

спасибо @ MorZa Теперь я получаю context = Mainactivity@4629, но изображение все еще не загружается в recylerview.

Intellij P 25.12.2018 10:44

Попробуйте отладить и проверить (imageload! = Null)

MorZa 25.12.2018 10:48
HomeFeaturedAdapter adapter = new HomeFeaturedAdapter(productList)

Вы используете неправильный конструктор для создания объекта адаптера. Вы должны использовать этот

HomeFeaturedAdapter adapter = new HomeFeaturedAdapter(getContext(),productList);

Вы используете несколько конструкторов в адаптере, поэтому вы используете один без context, поэтому ваш context в адаптере имеет значение NULL.

Я использовал getContext(), это решило мою ошибку конструктора, но изображение не загружается в recyclerview.

Intellij P 25.12.2018 10:48

Надеюсь, что это поможет вам. Это правильный код, я уже пробовал!

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

Другие вопросы по теме