Nano Hash - криптовалюты, майнинг, программирование

android - как привязать изображение, загруженное из picasso, к просмотру ресайклера

У меня есть список данных в классе MenuItemsModel(model) вместе с URL-адресом изображения и двумя строками, полученными из API. Как я могу загрузить URL-адрес изображения с помощью Picasso и как привязать загруженное изображение к recyclerview?

Вот мой код

Код для класса модели

  public class MenuItemsModel {

public int image;
public String itemName;
public String itemCost;

public MenuItemsModel(int image, String itemName, String itemCost) {
    this.image = image;
    this.itemName = itemName;
    this.itemCost = itemCost;
}
public int getImage() {
    return image;
}

public void setImage(int image) {
    this.image = image;
}

public String getItemName() {
    return itemName;
}

public void setItemName(String itemName) {
    this.itemName = itemName;
}

public String getItemCost() {
    return itemCost;
}

public void setItemCost(String itemCost) {
    this.itemCost = itemCost;
}
}

Вот мой класс RecyclerAdapter

       public class MenusRecyclearView extends 
       RecyclerView.Adapter<MenusRecyclearView.RecyclerViewHolder> {

Context context;
List<MenuItemsModel> menuItemsModel;

public MenusRecyclearView(Context context, List<MenuItemsModel> menuItemsModel) {
    this.context = context;
    this.menuItemsModel = menuItemsModel;
}

@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.menu_items_list, parent, false);
    return new RecyclerViewHolder(view, context, menuItemsModel);
}

@Override
public void onBindViewHolder(RecyclerViewHolder holder, int position) {
    holder.imageView.setImageResource(menuItemsModel.get(position).getImage());
    holder.ItemName.setText(menuItemsModel.get(position).getItemName());
    holder.ItemCost.setText(menuItemsModel.get(position).getItemCost());

    //Picasso.with(context).load(menuItemsModel.get(position).getImage()).into(holder.imageView);
}

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

public class RecyclerViewHolder extends RecyclerView.ViewHolder implements 
View.OnClickListener {
    public ImageView imageView;
    public TextView ItemName, ItemCost;
    Context ctx;
    List<MenuItemsModel> menuItemsModels;

    public RecyclerViewHolder(View view, Context ctx, List<MenuItemsModel> menuItemsModels) {

        super(view);
        this.ctx = ctx;
        this.menuItemsModels = menuItemsModels;
        view.setOnClickListener(this);
        imageView = view.findViewById(R.id.biriyani_menu_item);
        ItemName = view.findViewById(R.id.item_name);
        ItemCost = view.findViewById(R.id.item_cost);
    }

    @Override
    public void onClick(View v) {
        int position = getAdapterPosition();
        MenuItemsModel model = this.menuItemsModels.get(position);
        Intent i = new Intent(this.ctx, CategoryDescription.class);
        i.putExtra("ImageId", model.getImage());
        i.putExtra("ItemName", model.getItemName());
        i.putExtra("ItemCost", model.getItemCost());
        this.ctx.startActivity(i);
    }
}
}

** Вот мой класс MainActivity **

   public class BiryanisActivity extends AppCompatActivity implements 
   View.OnClickListener, NetworkOperationListener{

RecyclerView recyclerView;
MenusRecyclearView menusRecyclearView;
RecyclerView.LayoutManager layoutManager;
List<MenuItemsModel> menuItemsModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.biriyanis_activity);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);

    menuItemsModel = new ArrayList<>();
    recyclerView = (RecyclerView) findViewById(R.id.recyclearview_menu);
    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setHasFixedSize(true);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    menusRecyclearView = new MenusRecyclearView(this, menuItemsModel);
    recyclerView.setAdapter(menusRecyclearView);

    HttpAdapter.getMenuItemsList(this,"MenuItemsList");
    //prepareData();
   }

  /*  public void prepareData() {
    MenuItemsModel data = new MenuItemsModel(R.drawable.item5, "Chicken Dhum 
    Biriyani", "Rs.240");
    menuItemsModel.add(data);

    MenuItemsModel data1 = new MenuItemsModel(R.drawable.item2, "Chicken 
    Chilli Biriyani", "Rs.260");
    menuItemsModel.add(data1);

    MenuItemsModel data2 = new MenuItemsModel(R.drawable.item3, "Chicken 
    Tandhuri Biriyani", "Rs.280");
    menuItemsModel.add(data2);

    MenuItemsModel data3 = new MenuItemsModel(R.drawable.item4, "Chicken 
    Moghulai Biriyani", "Rs.230");
    menuItemsModel.add(data3);

    MenuItemsModel data4 = new MenuItemsModel(R.drawable.item1, "Chicken 
    Special Biriyani", "Rs.220");
    menuItemsModel.add(data4);

    MenuItemsModel data5 = new MenuItemsModel(R.drawable.item1, "Chicken 
    Mandi Biriyani", "Rs.210");
    menuItemsModel.add(data5);
    }*/

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
    }
    return false;
}

@Override
public void onClick(View view) {

}

@Override
public void operationCompleted(NetworkResponse response) {
    if (response.getStatusCode() == 200) {

        if (response.getTag().equals("MenuItemsList")) {

            try {
                JSONObject jsonObjects = new JSONObject(response.getResponseString());
                if (jsonObjects.getString("Data").equals("null")) {
                    Toast.makeText(this, "No Data Found", Toast.LENGTH_SHORT).show();
                    return;
                }
                JSONArray jsonArray = jsonObjects.getJSONArray("Data");
                        for (int j=0; j<jsonArray.length(); j++) {
                            JSONObject jsonObject = jsonArray.getJSONObject(j);
                            MenuItemsModel data = new Gson().fromJson(jsonObject.toString(),MenuItemsModel.class);
                            //Picasso.with(this).load(data.getImage()).into();
                            Picasso.with(this).load(data.getImage()).into(holder.imageView);
                           /*  int image = data.getImage();
                            String name = data.getItemName();
                            String cost = data.getItemCost();
                            //picaso(image, imageView);*/
                            menuItemsModel.add(data);
                        }
                        MenusRecyclearView menusRecyclearView = new MenusRecyclearView(this,menuItemsModel);
                        recyclerView.setAdapter(menusRecyclearView);

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

    } else {
        Toast.makeText(this, "Failed to Connect Server, Please try again later", Toast.LENGTH_SHORT).show();
    }
}

public void picaso(String path, ImageView imageView) {
    if (!path.equals(""))  {
        Picasso.with(this).load(path).into(imageView);
    }
}
}
24.10.2017

Ответы:


1

Что ж, вы на правильном пути. Вам нужно раскомментировать эту строку:

//Picasso.with(context).load(menuItemsModel.get(position).getImage()).into(holder.imageView);

И .getImage() должен стать вашим URL. Это означает, что вы должны хранить URL-адрес изображения внутри MenuItemsModel. Теперь ваш image является int и должен иметь тип String, чтобы вы могли передать ему URL-адрес.

Также см. этот ответ здесь:

https://stackoverflow.com/a/41157030/5457878

24.10.2017
  • если я раскомментирую строку 'Picasso.with(this).load(data.getImage()).into(holder.imageView);' как я могу загрузить изображение с Пикассо?. что именно я должен передать внутри .into(). в загрузке Пикассо?. каково назначение местоположения изображения в моем случае?. 24.10.2017
  • Holder.imageView — это изображение, которое вы определили в RecyclerViewHolder, которое будет R.id.biriyani_menu_item. Однако я думаю, что вам нужно изменить это. 24.10.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..