ukryj menu
SPEC
aktualizacja: 2022-05-23 09:17:23
2. RecyclerView i CardView
w pliku build gradle (module app)
implementation 'androidx.cardview:cardview:1.0.0'kopiuj
potem sync
3. Recyclerview w Activity
w głównym RelativeLayout
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>kopiuj
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>kopiuj
4. item z Cardview w pliku item.xml
w Relativelayout nowo stworzonego item.xml wstaw
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
kopiuj
android:layout_height="match_parent" />
wewnątrz dwa pola txt i imageview
5. klasa Javy przechowująca dane o zdjęciu
poniższe punkty 5,6,7 są zrealizowane na prostym przykładzie:
private String a;
private String b;
// dodaj konstruktor i gettery do powyższych zmiennych
}kopiuj
6. RecyclerAdapter - główna część projektu
dodaj klasę RecAdapter
dziedziczącą z RecyclerView.Adapter
po utworzeniu dopisz w klasie zamiast extends RecyclerView.Adapter
extends RecyclerView.Adapter<RecAdapter.ViewHolder>kopiuj
teraz program wymaga utworzenia klasy ViewHolder, wykonaj taką, klasa tworzy się na końcu klasy adaptera
potem generate implement methods:
onCreateViewHolder
onBindViewHolder
getItemCountkopiuj
do klasy adaptera dodaj konstruktor przyjmujący listę (ArrayList) renderowanych elementów
private List<Item> list;
public RecAdapter(List<Item> list) {
this.list = list;
}kopiuj
do klasy ViewHolder dodaj konstruktor (alt enter)
w klasie ViewHolder pola txt na wyświetlane dane z ArrayList
private TextView aTxt;
private TextView bTxt;kopiuj
potem w konstruktorze klasy ViewHolderkopiuj
aTxt = itemView.findViewById(R.id.aTxt);
bTxt = itemView.findViewById(R.id.bTxt);kopiuj
w metodzie onCreateViewHolder klasy adaptera pobieramy layout z item.xml
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item, parent, false);
return new ViewHolder(v);kopiuj
w metodzie onBindViewHolder klasy adaptera dobieramy się do pól txt, tutaj też później ustawimy obrazki z sieci
Item listItem = list.get(position);kopiuj
holder.aTxt.setText(listItem.getA());
holder.bTxt.setText(listItem.getB()); kopiuj
w metodzie getItemCount klasy adaptera
return list.size(); kopiuj
7. testowanie działania w Activity
w klasie
private ArrayList<Item> list = new ArrayList<>();
private RecyclerView recyclerView;
private RecAdapter adapter;
private RecyclerView.LayoutManager layoutManager;kopiuj
w onCreate
recyclerView = findViewById(R.id.recyclerView);kopiuj
list.add(new Item("a", "d"));
list.add(new Item("b", "e"));
list.add(new Item("c", "f"));kopiuj
potem
layoutManager = new LinearLayoutManager(MainActivity.this);
recyclerView.setLayoutManager(layoutManager);kopiuj
i
recyclerView.setAdapter(adapter);
kopiuj
UWAGA: Na tym etapie RecyclerView powinien wyświetlać testowe dane w dwu polach txt
8. Volley - biblioteka do JSON-a
zmiany w gradle (module app) jak poprzednio
implementation 'com.android.volley:volley:1.2.1'
9. dane json
url jsona pobierz z użyciem swojej aplikacji webowej
oczekiwany format danych:
[
{"name":"1652624957293.png","url":"/files/1652624957293.png","creationTime":1653059788877,"size":51981},
{"name":"1652625148074.png","url":"/files/1652625148074.png","creationTime":1653059788928,"size":51981},
{"name":"1652625262640.png","url":"/files/1652625262640.png","creationTime":1653059788952,"size":51981}
]kopiuj
{"name":"1652624957293.png","url":"/files/1652624957293.png","creationTime":1653059788877,"size":51981},
{"name":"1652625148074.png","url":"/files/1652625148074.png","creationTime":1653059788928,"size":51981},
{"name":"1652625262640.png","url":"/files/1652625262640.png","creationTime":1653059788952,"size":51981}
]kopiuj
request do serwera z uzyciem Volleya jak poprzednio
JsonArrayRequest jsonRequest = new JsonArrayRequest(
Request.Method.GET,
"url",
null,
response -> {
Log.d("xxx", "response: " + response)
for (int i = 0; i < response.length(); i++) {
JSONObject responseObj = response.getJSONObject(i);
Item listItem = new Item(
"czas zapisu: " + obj.getString("url"),
"wielkość zdjęcia: " + obj.getString("size")
);
list.add(listItem);
}
recyclerAdapter = new RecAdapter(list, context);
recyclerView.setAdapter(recyclerAdapter);
},
error -> {
Log.d("xxx", "error" + error.getMessage());
}
);
kopiuj
Request.Method.GET,
"url",
null,
response -> {
Log.d("xxx", "response: " + response)
for (int i = 0; i < response.length(); i++) {
JSONObject responseObj = response.getJSONObject(i);
Item listItem = new Item(
"czas zapisu: " + obj.getString("url"),
"wielkość zdjęcia: " + obj.getString("size")
);
list.add(listItem);
}
recyclerAdapter = new RecAdapter(list, context);
recyclerView.setAdapter(recyclerAdapter);
},
error -> {
Log.d("xxx", "error" + error.getMessage());
}
);
kopiuj
10. Picasso - biblioteka do ładowania zdjęć
zmiany w gradle (module app) jak poprzednio
implementation 'com.squareup.picasso:picasso:2.71828'kopiuj
gdzie przeczytać zdjęcia z sieci?
w adapterze w metodzie onBindViewHolder, po polach tekstowych
Picasso
.get()
.load("adres http dowolnego image")
.into(holder.imageView);kopiuj