Chciałbym wprowadzić materialną listę tego stylu. Jak mogę to zrobić na Androida? Na jakie zajęcia powinienem zajrzeć? Czy istnieją jakieś biblioteki, które mogą ułatwić to wdrożenie?Jak mogę wdrożyć Material Design Expand/Collapse List na Androida?
19
A
Odpowiedz
1
I wdrożone taką listę przy użyciu tej biblioteki:
expandable-recycler-view
Jest powiązany blog, ale odnosi się do starej wersji:
Expand a RecyclerView in Four Steps
to w zasadzie adapter gdzie możesz podać listę elementów nadrzędnych, które zawierają dzieci. Musisz również określić dwóch posiadaczy dla rodziców i dzieci. Zobacz stronę biblioteki, aby uzyskać więcej informacji.
class MyChild {
// add data
}
class MyParentListItem implements ParentListItem {
private final List<MyChild> mChildren;
MyParentListItem(List<MyChild> children) {
mChildren = children;
// add other data
}
@Override
public List<MyChild> getChildItemList() {
return mChildren;
}
@Override
public boolean isInitiallyExpanded() {
return false;
}
}
class MyParentViewHolder extends ParentViewHolder {
MyParentViewHolder(View itemView) {
super(itemView);
// get other views with itemView.findViewById(..);
}
}
class MyChildViewHolder extends ChildViewHolder {
MyParentViewHolder(View itemView) {
super(itemView);
// get other views with itemView.findViewById(..);
}
}
public class MyExpandableAdapter extends ExpandableRecyclerAdapter<MyParentViewHolder, MyChildViewHolder> {
private final LayoutInflater mInflater;
public MyExpandableAdapter(List<MyParentListItem> parentItemList, Context context) {
super(parentItemList);
mInflater = LayoutInflater.from(context);
}
@Override
public MyParentViewHolder onCreateParentViewHolder(ViewGroup parentViewGroup) {
final View itemView = mInflater.inflate(R.layout.parent_layout, parentViewGroup, false);
return new MyParentViewHolder(itemView);
}
@Override
public MyChildViewHolder onCreateChildViewHolder(ViewGroup childViewGroup) {
final View itemView = mInflater.inflate(R.layout.child_layout, childViewGroup, false);
return new MyChildViewHolder(itemView);
}
// bind data to holders in the onBind methods
}
5
Tak, można go łatwo wdrożyć w bibliotece SectionedRecyclerViewAdapter. Istnieje pełny przykład roboczy: here.
Zasadniczo utworzyć klasę sekcji:
class MySection extends StatelessSection {
String title;
List<String> list;
boolean expanded = true; // true if you want it to be displayed expanded initially
public MySection(String title, List<String> list) {
// call constructor with layout resources for this Section header, footer and items
super(R.layout.section_header, R.layout.section_item);
this.title = title;
this.list = list;
}
@Override
public int getContentItemsTotal() {
return expanded? list.size() : 0;
}
@Override
public RecyclerView.ViewHolder getItemViewHolder(View view) {
// return a custom instance of ViewHolder for the items of this section
return new MyItemViewHolder(view);
}
@Override
public void onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) {
MyItemViewHolder itemHolder = (MyItemViewHolder) holder;
// bind your view here
itemHolder.tvItem.setText(list.get(position));
}
@Override
public RecyclerView.ViewHolder getHeaderViewHolder(View view) {
return new SimpleHeaderViewHolder(view);
}
@Override
public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder) {
MyHeaderViewHolder headerHolder = (MyHeaderViewHolder) holder;
// bind your header view here
headerHolder.tvItem.setText(title);
// handles the click on the header to toggle the expanded variable
headerHolder.rootView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
expanded = !expanded;
headerHolder.imgArrow.setImageResource(
expanded ? R.drawable.ic_keyboard_arrow_up_black_18dp : R.drawable.ic_keyboard_arrow_down_black_18dp
);
sectionAdapter.notifyDataSetChanged();
}
});
}
}
Następnie należy skonfigurować RecyclerView ze swoimi sekcjach:
// Create an instance of SectionedRecyclerViewAdapter
SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter();
// Create your sections with the list of data for each topic
MySection topic1Section = new MySection("Attractions", attractionsList);
MySection topic2Section = new MySection("Dining", diningList);
// Add your Sections to the adapter
sectionAdapter.addSection(topic1Section);
sectionAdapter.addSection(topic2Section);
// Set up your RecyclerView with the SectionedRecyclerViewAdapter
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(sectionAdapter);
Powiązane problemy
- 1. AngularJs Material design RTL layout
- 2. crash - material design android 5.0
- 3. Autouzupełnianie/sugestie wyszukiwania z Material Design Lite?
- 4. Używanie materiału Android L Material Design na KitKat
- 5. WebView ze zwijanym paskiem narzędzi? (material design)
- 6. Material Design Lite - zmień kolor ikony szuflady
- 7. Jak korzystać z Modal Pop up z Material Design Lite?
- 8. Jak utworzyć czarno-biały motyw za pomocą Angular Material Design?
- 9. Jak wdrożyć wtyczkę qt5 qml na Androida?
- 10. Wyrównanie ikony do ikony paska narzędzi - Android Material Design
- 11. Szuflada nawigacji Material Design Lite (MDL) po prawej stronie
- 12. Nie można zaimportować Material Design Library w Androidzie studio
- 13. Niestandardowa klawiatura z Androidem w stylu Material Design
- 14. Jak mogę wdrożyć system głosowania?
- 15. Czy istnieje sposób na skalowanie elementu Material Design (AngularJS) <md-input>?
- 16. Jak mogę wdrożyć interfejs Iterable?
- 17. Jak można zwrócić obietnicę przez okno dialogowe w angularjs Material Design?
- 18. Czy Dyrektywy układu są obsługiwane przez Angular 2 Material Design Components?
- 19. Jak mogę wprowadzić SlideShow na Androida?
- 20. Jak mogę analizować XML na Androida?
- 21. Jaki jest zalecany rozmiar ikony ActionBar w Material Design (Android API 21+)?
- 22. Jak mogę wdrożyć szkolenie przyrostowe dla xgboost?
- 23. Jak mogę wdrożyć aplikację na moim iPhonie z wiersza poleceń?
- 24. Jak mogę wdrożyć UpdateCallback na CacheItemPolicy z innej klasy?
- 25. Jak mogę wdrożyć HATEOAS w Haskell?
- 26. Material Design Lite JS nie zastosowano do dynamicznie ładowanego pliku html
- 27. Jak mogę wdrożyć RESTful API w Perlu?
- 28. Jak mogę wdrożyć stare zatwierdzenia do Heroku?
- 29. Gradient pasek stanu na Androida Lollipop
- 30. Jak mogę wdrożyć IRandomAccessStream w języku C#?
Czy znaleźć rozwiązanie dla tego, co biblioteka nie skończy się za pomocą? Obecnie używam [tego] (https://github.com/HeinrichReimer/material-drawer), ale szukam zwijanych elementów, takich jak zrzuty ekranu – Mendhak