Использование Пикассо во фрагменте - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть RecyclerView, и я хочу отправить URL со статической картой Google и установить эту карту с помощью Picasso.Теперь я только пытаюсь установить статическую карту для каждого элемента в RecyclerView, но Picasso.with (x) не имеет контекста.Как это сделать?

Может быть, я могу сгенерировать изображение в FragmentHistory и отправить его в качестве аргумента?

FragmentHistory.xml имеет только RecyclerView;

Мой FragmentHistory:

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_history, container, false);
    ButterKnife.bind(this, view);



    FragmentHistorySimpleAdapter adapter = new FragmentHistorySimpleAdapter(generateSimpleListAllWorkout());
    RecyclerView recyclerView = (RecyclerView) historyRecyclerView;
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.setAdapter(adapter);

    return view;
}

Функция для получения данных из BD:

 private List<FragmentHistorySimpleViewModel> generateSimpleListAllWorkout() {


    List<FragmentHistorySimpleViewModel> simpleViewModelList = new ArrayList<>();


    DataBaseMain bd = new DataBaseMain(getActivity());
    Cursor kurs = bd.giveAllWorkout();

    if (kurs.getCount() != 0) {

        kurs.moveToLast();
        do {

            // Pobranie wartości z kolumn (0-3)

            String nr = kurs.getString(0);
            String time = kurs.getString(1);
            String workoutTime = kurs.getString(2);
            String distance = kurs.getString(3);
            String avgSpeed = kurs.getString(4);
            String avgPace = kurs.getString(5);
            String kcal = kurs.getString(6);
            String LatLng = kurs.getString(7);
            String dane = "ID: " + nr + "\n"
                    + "Time: " + time + "\n"
                    + "Workout time: " + workoutTime + "\n"
                    + "Distance: " + distance + " km" + "\n"
                    + "Average speed: " + avgSpeed + " km/h" + "\n"
                    + "Average pace: " + avgPace + " min/km" + "\n"
                    + "Calories: " + kcal;


            simpleViewModelList.add(new FragmentHistorySimpleViewModel(dane, "OK"));


            // Dopóki kursor może poruszać się w dół (po wynikach)
        } while (kurs.moveToPrevious());
    }

    return simpleViewModelList;
}

Мой фрагмент_история_simple_item.xml имеет только 2x просмотр текста и просмотр изображений

FragmentHistorySimpleAdapter:

public class FragmentHistorySimpleAdapter extends RecyclerView.Adapter
{

private List<FragmentHistorySimpleViewModel> models = new ArrayList<>();

public FragmentHistorySimpleAdapter(final List<FragmentHistorySimpleViewModel> viewModels)
{
    if (viewModels != null)
    {
        this.models.addAll(viewModels);
    }
}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
    final View view = LayoutInflater.from(parent.getContext()).inflate(viewType, parent, false);
    return new FragmentHistorySimpleViewHolder(view);
}

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position)
{
    ((FragmentHistorySimpleViewHolder) holder).bindData(models.get(position));
}

@Override
public int getItemCount()
{
    return models.size();
}

@Override
public int getItemViewType(final int position)
{
    return R.layout.fragment_history_simple_item;
}
}

FragmentHistorySimpleViewModel:

public class FragmentHistorySimpleViewModel
{

private String simpleText;
private String simpleText2;


public FragmentHistorySimpleViewModel(@NonNull final String simpleText, @NonNull final String simpleText2)
{
    setSimpleText(simpleText, simpleText2);

}

@NonNull
public String getSimpleText()
{
    return simpleText;
}

@NonNull
public String getSimpleText2()
{
    return simpleText2;
}

public void setSimpleText(@NonNull final String simpleText, @NonNull final String simpleText2)
{
    this.simpleText = simpleText;
    this.simpleText2 = simpleText2;


}
}

FragmentHistorySimpleViewHolder:

  public class FragmentHistorySimpleViewHolder extends RecyclerView.ViewHolder
     {
    private TextView simpleTextView;
    private TextView simpleTextView2;
    private ImageView imageView;

    public FragmentHistorySimpleViewHolder(final View itemView)
    {
        super(itemView);
        simpleTextView = (TextView) itemView.findViewById(R.id.simple_text);
        simpleTextView2 = (TextView) itemView.findViewById(R.id.simple_text2);
        imageView = itemView.findViewById(R.id.imageView);



    }

       public void bindData(final FragmentHistorySimpleViewModel viewModel)
       {
        simpleTextView.setText(viewModel.getSimpleText());
        simpleTextView2.setText(viewModel.getSimpleText2());

        String latitudeURL = "42";
        String longitudeURL = "122";
        String url ="https://maps.googleapis.com/maps/api/staticmap?";
        url+="&zoom=13";
        url+="&size=600x300";
        url+="&maptype=roadmap";
        url+="&markers=color:green%7Clabel:G%7C" + latitudeURL + "," + longitudeURL;
        url+="&key=" + "AIzaSyCj80x6EGndGx07Hy7zuaLx_KFsHKlogV0";

        Picasso.with(??????)
                .load(url)
                .into(imageView);



    }
    }

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Прежде всего, вы можете использовать библиотеку Glide вместо Picasso.Поскольку Glide легко загружает любое изображение, независимо от того, является ли оно растровым изображением или URL-адресом и т. Д., И более масштабируемо, чем Picasso.

Теперь ваш вопрос, как получить контекст здесь: вы можете специально отправитьконтекст фрагмента при создании объекта FragmentHistorySimpleAdapter и получении контекста из конструктора FragmentHistorySimpleAdapter и использовании этого контекста в любом месте.

My FragmentHistory:

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_history, container, false);
    ButterKnife.bind(this, view);

    Context context = container.context;

    FragmentHistorySimpleAdapter adapter = new FragmentHistorySimpleAdapter(generateSimpleListAllWorkout(), context);

    return view;
}

FragmentHistorySimpleAdapter:

private Context context;
private List<FragmentHistorySimpleViewModel> models = new ArrayList<>();

public FragmentHistorySimpleAdapter(final List<FragmentHistorySimpleViewModel> viewModels, Context context) {

    if (viewModels != null) {
        this.models.addAll(viewModels);
        this.context = context;
    }
}
}
0 голосов
/ 04 февраля 2019

Я сомневаюсь, что на этот вопрос уже не будет ответа, но я думаю, что вы всегда можете использовать imageView.getContext () в качестве контекста для Пикассо.Тогда у вас будет что-то вроде Picasso.with(imageView.getContext()).load(url).into(imageView);

Кроме того, ваша библиотека Picasso может быть одной из старых версий?Последняя версия имеет другой API.Что-то вроде Picasso.get().load(url).into(imageView);

...