Przekierowanie przez zdjęcie do strony www

Odpowiedz Nowy wątek
2018-03-23 11:39
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.

Dziękuję, jednak zawsze staram się najpierw poszukać i te linki widziałem. ALe co w przypadku jak będę chciał mieć 100 zdjęć i pod każdym zdjęciem inny adres url ? Bo takiej wiadomości nie znalazłem. - pawlo00 2018-03-23 12:02

Pozostało 580 znaków

2018-03-23 12:05
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.


edytowany 2x, ostatnio: Patryk27, 2018-03-23 12:05

Pozostało 580 znaków

2018-03-23 12:10
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ć :)

Pozostało 580 znaków

2018-03-23 13:15
EloMoto
0

RecyclerView + ViewHolder + onClickListener z getAdapterId

Pozostało 580 znaków

2018-03-23 15:46
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);
  }
}
edytowany 2x, ostatnio: Michał Sikora, 2018-03-23 16:22
Nie uważasz, że Twój przykład jest zbyt... przekomplikowany? Ogrom klas wcale nie sprzyja czytelności. - Patryk27 2018-03-23 16:32
Nie, nie uważam. Nie wiem, jak można zrobić prościej na RecyclerView. Teoretycznie można pozbyć się OnPictureItemClickListener, ale wtedy trzeba korzystać z getAdapterPosition() i obsługiwać RecyclerView.NO_POSITION. - Michał Sikora 2018-03-23 16:37

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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