Android ListView с некоторыми показанными элементами и показывать больше кнопки -- java поле с участием android поле с участием listview пол Связанный проблема

Android ListView with some items shown and Show More button


1
vote

проблема

русский

Я нахожу его трудно искать то, что я ищу, поэтому я думал, что постараюсь объяснить это здесь. В настоящее время у меня есть пользовательский список в ScrollView. Каждый элемент ListView содержит детали филиала для магазина, то есть уличный адрес, город, телефон. Я использовал функцию setListViewHeightBasedOnChildren , показанный ниже, чтобы обойти «прокрутка списка в задаче ScrollView», расширяя его полную высоту «ListView».

Что я хотел бы сделать сейчас, есть, если в магазине больше 2 филиалов, показывают 2 ветвей, а затем имеют кнопку в нижней части списка, который говорит «Показать больше». Если возможно, что кнопка будет сидеть на вершине списка, частично показывая третью ветвь, чтобы дать ему прозрачный градиентный эффект чего-то похожего на Это . Нажав на кнопку, в идеале оживляет список ListView, так как он открывается вниз. Я понимаю, что это большой спроси, но я просто хотел бы знать, возможно ли это и точку в правильном направлении. Я могу работать над пользовательским решением, когда у меня есть идея, с чего начать.

Мой список реализации и файлы макета можно увидеть ниже:

FINTHLISTAPTER.java

 <код> public class BranchListAdapter extends ArrayAdapter<HashMap<String, String>> {  private Context mContext; private LayoutInflater mLayoutInflater;  public BranchListAdapter(Context context) {     super(context, android.R.layout.simple_list_item_1);     mContext = context;     mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); }  @Override public View getView(int position, View convertView, ViewGroup parent) {     final View view;      if(convertView == null) {         view = mLayoutInflater.inflate(R.layout.fragment_shop_details_branch_list_item, parent, false);     } else {         view = convertView;     }      final HashMap<String, String> branch = getItem(position);      TextView address = (TextView) view.findViewById(R.id.branch_list_item_address);     TextView city = (TextView) view.findViewById(R.id.branch_list_item_city);     TextView phone = (TextView) view.findViewById(R.id.branch_list_item_phone);      address.setText(branch.get("address"));     city.setText(branch.get("city"));     phone.setText(branch.get("phone"));      return view; }  public void setData(List<HashMap<String, String>> branches) {     clear();     if(branches != null) {         for(HashMap<String, String> branch : branches) {             if(!branch.get("address").equals(""))                 add(branch);         }     } } }   

fragment_shop_details_branch_list_adapter.xml

 <код> <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.GridLayout     android:id="@+id/branch_list_item_grid"     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:grid="http://schemas.android.com/apk/res-auto"     android:layout_width="match_parent"     android:layout_height="wrap_content"     grid:columnCount="2"     grid:orientation="vertical"     android:paddingLeft="16dp"     android:paddingRight="16dp"     android:paddingTop="8dp"     xmlns:tools="http://schemas.android.com/tools">  <TextView     android:text="Address"     android:textColor="#000000"     android:textSize="16sp"     grid:layout_column="0"     grid:layout_gravity="center_vertical"     grid:layout_row="0"     />  <TextView     android:id="@+id/branch_list_item_address"     android:layout_width="0dp"     android:gravity="center"     android:maxLines="2"     tools:text="31 Fitzwilliam Manor, The Island"     android:textColor="#000000"     android:textSize="16sp"     grid:layout_column="1"     grid:layout_gravity="fill_horizontal"     grid:layout_row="0"     />  <TextView     android:text="City"     android:textColor="#000000"     android:textSize="16sp"     grid:layout_column="0"     grid:layout_gravity="center_vertical"     grid:layout_row="1"     />  <TextView     android:id="@+id/branch_list_item_city"     android:layout_width="0dp"     android:gravity="center"     android:maxLines="2"     tools:text="Dublin"     android:textColor="#000000"     android:textSize="16sp"     grid:layout_column="1"     grid:layout_gravity="fill_horizontal"     grid:layout_row="1"     />  <TextView     android:text="Phone"     android:textColor="#000000"     android:textSize="16sp"     grid:layout_column="0"     grid:layout_gravity="center_vertical"     />  <TextView     android:id="@+id/branch_list_item_phone"     android:layout_width="0dp"     android:gravity="center"     android:maxLines="2"     tools:text="01 456 7890"     android:textColor="#000000"     android:textSize="16sp"     grid:layout_column="1"     grid:layout_gravity="fill_horizontal"     grid:layout_row="2"     />  <Button     android:id="@+id/branch_list_item_button_showmap"     style="?android:attr/borderlessButtonStyle"     android:text="@string/show_on_map"     android:textColor="#0645AD"     android:textSize="14sp"     grid:layout_column="0"     grid:layout_columnSpan="2"     grid:layout_columnWeight="1"     grid:layout_gravity="center"     grid:layout_row="4"/> </android.support.v7.widget.GridLayout>   

Разверните список представления в функцию полной высоты

 <код> public static void setListViewHeightBasedOnChildren(ListView listView) {         ListAdapter listAdapter = listView.getAdapter();         if (listAdapter == null) {             // pre-condition             return;         }          int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom();         for (int i = 0; i < listAdapter.getCount(); i++) {             View listItem = listAdapter.getView(i, null, listView);             if (listItem instanceof ViewGroup) {                 listItem.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));             }             listItem.measure(0, 0);             totalHeight += listItem.getMeasuredHeight();         }          ViewGroup.LayoutParams params = listView.getLayoutParams();         params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));         listView.setLayoutParams(params);     }   

И, наконец, вот как реализован список listview в фрагменте:

 <код>     mBranchListAdapter = new BranchListAdapter(getActivity());     mBranchListAdapter.setData(mShop.getBranchDetails());     mBranchListView.setAdapter(mBranchListAdapter);     MiscUtils.setListViewHeightBasedOnChildren(mBranchListView);   
Английский оригинал

I'm finding it hard to search for what I'm looking for so I thought I'd try and explain it here. I currently have a Custom ListView within a ScrollView. Each ListView item contains the Branch details for a shop, i.e. street address, city, phone. I've used the setListViewHeightBasedOnChildren function shown below to get around the "scrolling a ListView in a ScrollView" problem by expanding the ListView to it's full height.

What I would like to do now is, if a shop has greater than 2 branches, show 2 of the branches and then have a button at the bottom of the list view that says "Show More". If possible the button would sit on top of the list, partially showing the third branch to give it a transparent gradient effect something similar to this. Clicking on the button would ideally animate the ListView as it opens downward. I understand this is a big ask but I would just like to know if it is possible and a point in the right direction. I can work on a custom solution myself once I have an idea where to start.

My ListView implementation and Layout files can be seen below:

BranchListAdapter.java

public class BranchListAdapter extends ArrayAdapter<HashMap<String, String>> {  private Context mContext; private LayoutInflater mLayoutInflater;  public BranchListAdapter(Context context) {     super(context, android.R.layout.simple_list_item_1);     mContext = context;     mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); }  @Override public View getView(int position, View convertView, ViewGroup parent) {     final View view;      if(convertView == null) {         view = mLayoutInflater.inflate(R.layout.fragment_shop_details_branch_list_item, parent, false);     } else {         view = convertView;     }      final HashMap<String, String> branch = getItem(position);      TextView address = (TextView) view.findViewById(R.id.branch_list_item_address);     TextView city = (TextView) view.findViewById(R.id.branch_list_item_city);     TextView phone = (TextView) view.findViewById(R.id.branch_list_item_phone);      address.setText(branch.get("address"));     city.setText(branch.get("city"));     phone.setText(branch.get("phone"));      return view; }  public void setData(List<HashMap<String, String>> branches) {     clear();     if(branches != null) {         for(HashMap<String, String> branch : branches) {             if(!branch.get("address").equals(""))                 add(branch);         }     } } } 

fragment_shop_details_branch_list_adapter.xml

<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.GridLayout     android:id="@+id/branch_list_item_grid"     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:grid="http://schemas.android.com/apk/res-auto"     android:layout_width="match_parent"     android:layout_height="wrap_content"     grid:columnCount="2"     grid:orientation="vertical"     android:paddingLeft="16dp"     android:paddingRight="16dp"     android:paddingTop="8dp"     xmlns:tools="http://schemas.android.com/tools">  <TextView     android:text="Address"     android:textColor="#000000"     android:textSize="16sp"     grid:layout_column="0"     grid:layout_gravity="center_vertical"     grid:layout_row="0"     />  <TextView     android:id="@+id/branch_list_item_address"     android:layout_width="0dp"     android:gravity="center"     android:maxLines="2"     tools:text="31 Fitzwilliam Manor, The Island"     android:textColor="#000000"     android:textSize="16sp"     grid:layout_column="1"     grid:layout_gravity="fill_horizontal"     grid:layout_row="0"     />  <TextView     android:text="City"     android:textColor="#000000"     android:textSize="16sp"     grid:layout_column="0"     grid:layout_gravity="center_vertical"     grid:layout_row="1"     />  <TextView     android:id="@+id/branch_list_item_city"     android:layout_width="0dp"     android:gravity="center"     android:maxLines="2"     tools:text="Dublin"     android:textColor="#000000"     android:textSize="16sp"     grid:layout_column="1"     grid:layout_gravity="fill_horizontal"     grid:layout_row="1"     />  <TextView     android:text="Phone"     android:textColor="#000000"     android:textSize="16sp"     grid:layout_column="0"     grid:layout_gravity="center_vertical"     />  <TextView     android:id="@+id/branch_list_item_phone"     android:layout_width="0dp"     android:gravity="center"     android:maxLines="2"     tools:text="01 456 7890"     android:textColor="#000000"     android:textSize="16sp"     grid:layout_column="1"     grid:layout_gravity="fill_horizontal"     grid:layout_row="2"     />  <Button     android:id="@+id/branch_list_item_button_showmap"     style="?android:attr/borderlessButtonStyle"     android:text="@string/show_on_map"     android:textColor="#0645AD"     android:textSize="14sp"     grid:layout_column="0"     grid:layout_columnSpan="2"     grid:layout_columnWeight="1"     grid:layout_gravity="center"     grid:layout_row="4"/> </android.support.v7.widget.GridLayout> 

Expand List View to Full Height function

public static void setListViewHeightBasedOnChildren(ListView listView) {         ListAdapter listAdapter = listView.getAdapter();         if (listAdapter == null) {             // pre-condition             return;         }          int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom();         for (int i = 0; i < listAdapter.getCount(); i++) {             View listItem = listAdapter.getView(i, null, listView);             if (listItem instanceof ViewGroup) {                 listItem.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));             }             listItem.measure(0, 0);             totalHeight += listItem.getMeasuredHeight();         }          ViewGroup.LayoutParams params = listView.getLayoutParams();         params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));         listView.setLayoutParams(params);     } 

And finally this is how the ListView is implemented in the Fragment:

    mBranchListAdapter = new BranchListAdapter(getActivity());     mBranchListAdapter.setData(mShop.getBranchDetails());     mBranchListView.setAdapter(mBranchListAdapter);     MiscUtils.setListViewHeightBasedOnChildren(mBranchListView); 
</div
        
 
 

Список ответов

Связанный проблема

0  Чехол для тестирования, где нуль должен быть возвращен с помощью RestController с Mockito Change  ( Testing case where null should be returned using restcontroller with mockito fai ) 
Я хочу проверить корпус NullPointexception, который следует бросить контроллер, который я проверяю, но я всегда получаю ошибку NullPointexception. Я пытаюсь п...

1  Как увеличить предел параллельного соединения OpenFire?  ( How to increase openfire concurrent connection limit ) 
Я пытаюсь проверить, сколько одновременных пользовательских подключений Openfire может обрабатывать. Я заметил предел при 4000 пользователями. Как я могу ...

1  Кварц Schdeuler для нескольких проектов в JBOSS 5  ( Quartz schdeuler for multiple projects in jboss 5 ) 
Я развернул два проекта (P1 & AMP; P2) в JBOSS 5. Оба проекта настроены с различными кварцевыми планировщиками. Но когда я заплатурую работу на P1, он доступа...

-2  В классе F250.java есть две петли, которые не будут работать  ( There are two loops in the f250 java class that wont run ) 
Класс F250.java - это объект оружия, и есть два метода, которые привлекают и обновляют пули, выходящие из пистолета. Я сделал класс пули и сделал массив пули ...

12  Способ вызова в EJB на jboss запустить [дубликат]  ( Call method in ejb on jboss startup ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

56  Когда использовать явное ожидание против неявного ожидания в Webdriver Selenium?  ( When to use explicit wait vs implicit wait in selenium webdriver ) 
Я использую: <код> driver.manage().timeouts().implicitlyWait(180, TimeUnit.SECONDS); Но он все еще непрерывно не работает для нижеизведанного элемента ...

1  Могу ли я нажать на свой собственный объект пользователя в Security SecurityContext?  ( Can i push my own user object into springs securitycontext ) 
Я новичок в весенней безопасности и последовал за некоторыми основными рецептами, чтобы получить весеннюю безопасность, работающую в моем заявлении, но теперь...

1  Простое Javaee HTML Get / Post Application  ( Simple javaee html get post application ) 
Я просто начинаю с Javaee (я вполне свободно владею в Javase), и у меня возникли проблемы с обездованием моего мозга вокруг всех новых вещей, которые необходи...

1  Улучшение моего жадного алгоритма  ( Improving my greedy algorithm ) 
** Это мой код, который выглядит способ найти сумму в массиве ** <код> public class Piecedemonei { public static void recherche(int[] tab) { ...

49  Как извлечь строку между двумя разграничителями [дубликат]  ( How to extract a string between two delimiters ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

0  Общее утверждение для ошибки recuralandom return - Java  ( General statement for securerandom return error java ) 
Я искал на протяжении разных форумов, и теперь я наконец-то ставит свой вопрос, так как я не могу найти конкретный ответ. Я пишу протокол безопасности для д...

4  Как полностью квалифицировать класс, имя пакета которого сталкивается с местным именем члена?  ( How to fully qualify a class whose package name collides with a local member nam ) 
ОК, вот очень любопытная языковая головоломка Java 7 для специалистов JLS там. Следующий кусок кода не скомпилируется, ни с Javac, ни с Eclipse: <код> ...

0  Строка заменить приключение в Java  ( String replace adventure in java ) 
Я пытаюсь добиться этого - если строка содержит шаблон <код> %25 с последующим любое количество альфа-цифровых символов, то мне нужно заменить <код> %25 с <...

0  Java нерешенная переменная JPanel?  ( Java unresolved jpanel variable ) 
Почему не может <код> aniPanel быть разрешена в переменной. Я пробовал <код> AniPanel aniPanel = new AniPanel(); Но это не решает проблему. Я также по...

1  Обратитесь к веб-странице внутри файла JAR  ( Refer to a web page inside a jar file ) 
У меня есть рабочий проект. Он включает в себя другой проект, который имеет дело с отдыхом как REST-API.jar. Теперь я сделал одностраничное интернет-интерфе...

Связанный проблема

0  Чехол для тестирования, где нуль должен быть возвращен с помощью RestController с Mockito Change 
1  Как увеличить предел параллельного соединения OpenFire? 
1  Кварц Schdeuler для нескольких проектов в JBOSS 5 
-2  В классе F250.java есть две петли, которые не будут работать 
12  Способ вызова в EJB на jboss запустить [дубликат] 
56  Когда использовать явное ожидание против неявного ожидания в Webdriver Selenium? 
1  Могу ли я нажать на свой собственный объект пользователя в Security SecurityContext? 
1  Простое Javaee HTML Get / Post Application 
1  Улучшение моего жадного алгоритма 
49  Как извлечь строку между двумя разграничителями [дубликат] 
0  Общее утверждение для ошибки recuralandom return - Java 
4  Как полностью квалифицировать класс, имя пакета которого сталкивается с местным именем члена? 
0  Строка заменить приключение в Java 
0  Java нерешенная переменная JPanel? 
1  Обратитесь к веб-странице внутри файла JAR 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.