Przekierowanie przez zdjęcie do strony www

0

Witam,
czy ktoś z was wie jak w androidzie zrobić tak, że jeśli mamy jakąś listę obrazków (tak jak np. w instagramie) i kliknę na dany obrazek to żeby przeniosło mnie na daną stronę www ?
W skrócie chodzi mi o przekierowanie po kliknięciu w obrazek :)
Z góry dzięki za pomoc.

0

ALe co w przypadku jak będę chciał mieć 100 zdjęć i pod każdym zdjęciem inny adres url ?

Zdjęcia tworzysz w jakiejś pętli, prawda? W tej samej pętli możesz od razu podpinać setOnClickListener, które będzie zależne od iteratora pętli / jakiegoś obiektu zdjęcia / whatever.

Wrzuć kod, będzie prościej.

0

Wrzucę pod popołudniu, teraz chciałem zaczerpnąć informacji. Widziałeś może aplikację Pinterest ? No to właśnie, coś takiego próbuję wyrzeźbić :)

0

RecyclerView + ViewHolder + onClickListener z getAdapterId

0

Możesz na przykład tak jak poniżej. Niestety nie napisałeś skąd bierzesz obrazek i link, więc PictureItem jest zamodelowane z dwoma Stringami i nie ma nigdzie żadnego sprawdzania czy ich format jest poprawny. Po prostu zakładam, że jest. Przydałoby się jeszcze kilka klas, żeby było bardziej elegancko pod względem odpowiedzialności, ale ogólny zarys jest zachowany. Nie ustawiam też nigdzie listy obrazków za pomocą PictureItemAdapter.updateItems(), bo nie wiem gdzie jest ich źródło.

final class PictureItem {
  final String path;
  final String link;

  PictureItem(String path, String link) {
    this.path = path;
    this.link = link;
  }
}
interface OnPictureItemClickListener {
  void onClick(PictureItem item);
}
final class PictureItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
  private final ImageView image;
  private final OnPictureItemClickListener listener;

  private PictureItem item;

  PictureItemViewHolder(View itemView, OnPictureItemClickListener listener) {
    super(itemView);
    this.listener = listener;
    this.image = itemView.findViewById(R.id.image);
    itemView.setOnClickListener(this);    
  }

  @Override
  public void onClick(View v) {
    if (item == null) {
      throw new IllegalStateException("Cannot click on picture item without binding it first");
    }
    listener.onClick(item);
  }

  void bindItem(PictureItem item) {
    this.item = item;
    Picasso.get()
        .load(item.path)
        .into(image);
  }
}
final class PictureItemAdapter extends RecyclerView.Adapter<PictureItemViewHolder> {
  private final LayoutInflater inflater;
  private final OnPictureItemClickListener listener;

  private List<PictureItem> items = Collections.emptyList();

  PictureItemAdapter(LayoutInflater inflater, OnPictureItemClickListener listener) {
    this.inflater = inflater;
    this.listener = listener;
  }

  void updateItems(List<PictureItem> items) {
    this.items = items;
  }

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

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

  @NonNull
  @Override
  public PictureItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = inflater.inflate(viewType, parent, false);
    return new PictureItemViewHolder(view, listener);
  }

  @Override
  public void onBindViewHolder(@NonNull PictureItemViewHolder holder, int position) {
    holder.bindItem(items.get(position));
  }
}
public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(@Nullable Bundle inState) {
    super.onCreate(inState);
    setContentView(R.layout.main);

    PictureItemAdapter adapter = new PictureItemAdapter(getLayoutInflater(), new OnPictureItemClickListener() {
      @Override
      public void onClick(PictureItem item) {
        Uri url = Uri.parse(item.link);
        Intent openLink = new Intent(Intent.ACTION_VIEW);
        openLink.setData(url);
        startActivity(openLink);
      }
    });

    RecyclerView itemRecycler = findViewById(R.id.recyclerView);
    itemRecycler.setLayoutManager(new LinearLayoutManager(this));
    itemRecycler.setAdapter(adapter);
  }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1