Calculate the Size of a List View or How to Tell It to Fully Expand

Calculate the size of a list view or how to tell it to fully expand

Well, thanks to Rudy, his suggestions was very helpful. Here is how it can be implemented.

1) Create a new class that extends ListView:

package com.example.android.views;

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.widget.ListView;

public class ExpandedListView extends ListView {

private android.view.ViewGroup.LayoutParams params;
private int old_count = 0;

public ExpandedListView(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
protected void onDraw(Canvas canvas) {
if (getCount() != old_count) {
old_count = getCount();
params = getLayoutParams();
params.height = getCount() * (old_count > 0 ? getChildAt(0).getHeight() : 0);
setLayoutParams(params);
}

super.onDraw(canvas);
}

}

2) ... and finally add the new view to your xml layout file:

<com.example.android.views.ExpandedListView
android:id="@+id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="none"
android:padding="0px"
/>

Android: How to measure total height of ListView

Finally I've done it! This is the working code which measures ListView height and sets ListView in full size:

public static void getTotalHeightofListView(ListView listView) {

ListAdapter mAdapter = listView.getAdapter();

int totalHeight = 0;

for (int i = 0; i < mAdapter.getCount(); i++) {
View mView = mAdapter.getView(i, null, listView);

mView.measure(
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),

MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

totalHeight += mView.getMeasuredHeight();
Log.w("HEIGHT" + i, String.valueOf(totalHeight));

}

ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (mAdapter.getCount() - 1));
listView.setLayoutParams(params);
listView.requestLayout();

}

Set ListView height to display all available items

If you want a list of items that doesn't scroll, it's called a linearlayout.

Else if you want you can custom listview as:

public class NonScrollListView extends ListView {

public NonScrollListView(Context context) {
super(context);
}
public NonScrollListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NonScrollListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
ViewGroup.LayoutParams params = getLayoutParams();
params.height = getMeasuredHeight();
}
}

How can I create a list view with expandable group headings?

I used a constrained box and a ConfigurableExpansionTile to create a box for my listview.builder to live

 import 'package:flutter/material.dart';
import 'package:configurable_expansion_tile_null_safety/configurable_expansion_tile.dart';

class DataStoreClass {
String header;
List<String> items;
DataStoreClass(this.header, this.items);
}

class MachineLearningCase extends StatefulWidget {
MachineLearningCase({Key key}) : super(key: key);

@override
State<MachineLearningCase> createState() => _MachineLearningCaseState();
}

class _MachineLearningCaseState extends State<MachineLearningCase> {
List<DataStoreClass> lstData = [
DataStoreClass("Sales - We help integrate Salesloft and Chorus.ai", [
"Salesloft tracks conversations between the agent and customer through the complete pipeline. Data is accessible by mobile device. The mantra is “Contact the right people with the right message” and add value in every conversation. The customer engagement is tracked and stored on the server. Salesloft tracks opportunity and sales close generating revenue. Opportunity, Sales conversation, and Action step sequence.",
"chorus.ai is customer centric platform. The software helps the owner understand “What can we learn from our products?” Chorus captures interactions in phone and email using ai. chorus.ai stack includes voice recognition. chorus analyzes conversations by converting the voice to text and it uses a search engine to find phrases by time. Three reasons to analyze conversation: differentiation the closers, cut down on ramp time, and reducing the 80% of calls lost. chorus.ai decompose conversation into semantics and core building blocks. The data is used to determine risks for the deal and topics and themes from conversations. Performance must be collaborative and friendly. Conversation must be open ended to discover the pain the customer is experiencing.",
" Gong translates customer calls into text then learns from the text and helps marketers upsell. gong creates work flows. it finds conversations by search phrases. I can see the possible of using the text conversations between customers and agents to find similarities, summarizations, and classifications of similar customers and by grouping like-customers there will be synergy effects to be capitalized upon."
]),
DataStoreClass("Legal Answers - We help integrate GPT-3", [
"GPT-3 is good at drawing correlations across a wide dataset. GPT-3 can summarize connections—things that are statistically related, where humans cannot easily see these connections.",
"GPT-3 is good at producing documents. GPT-3 can ingest text then predict what text should come next. GPT-3 can write in a certain voice.",
"GPT-3 can be hyper-tuned to an organization’s own data. GPT-3 is a statistical engine. Usefulness is judged by GPT-3‘s ability to complete a task.",
"The legal departments’ common problem is interaction between business units and the legal department. GPT-3 can provide immediate answers to common questions. GPT-3 has the ability to create answers and documents.",
]),
DataStoreClass(
"Mental Health - We build your AI natural language pipeline", [
"Machines are starting to do a lot of the medical tasks like analyzing X-rays and CAT scans for certain features. Another area where GPT-3 could apply is mental health. Mental health is an area the machine could excel in because it remembers the conversational context of previous discussions, and it pulls from a large clinical data source for comparison and contrasting issues.",
"Using Deep learning a few symptoms, the machine can accurately diagnose a specific disease. Medicine is very good at classifying disease and given an accurate identification of a disease the deep learning algorithm can accurately classify the disease."
]),
DataStoreClass("Media Search - We integrate Deepgram", [
"Deepgram, high-speed, speech recognition uses GPU in the cloud. Deepgram media-to-text will allow all media to be searched to specific points in time when certain text phrases occur."
]),
DataStoreClass("HVAC", [
"Brainbox AI applies the same technology used in self-driving vehicles to control HVAC systems for large buildings. The systems adjust configurations automatically to keep the system running at optimium performance. As a result, there is less need for maintenance checkups because the system does its own monitoring and diagnosis."
]),
DataStoreClass("Legal Research - We integrate Eigen", [
"AI applied to law is about making our work simpler and speeding up research. Ross AI legal assistant saves time by searching for data and allowing questions and answers about parts of legal documentation.",
"Eigen uses Natural Language Processing (NLP) to answer specific questions about legal documentation."
]),
DataStoreClass("Grocery Delivery", [
"Grocery delivery is becoming a new standard service. Nuro delivers groceries. Nuro pizza delivery robot in Texas works as follows: The vehicle delivers the pizza to the customer’s location, the customer receives a notification the pizza vehicle has arrived, and the customer inputs a pin. The Nuro doors open, and the customer retrieves his pizza. It needs a bot to drop the pizza box at the doorstep and ring the bell."
]),
DataStoreClass("Transportation", [
"Decision-making and motion planning are the primary responsibilities of mobile robots. Taking input from a variety of perception and localization systems, the planner’s job is to figure out where the robot is going and how to get it there safely. They look for software engineers with experience building real-time motion planning/trajectory generation algorithms for robots in uncertain environments. ",
"Robo-Bus can auto park and auto charge. The bus runs a predictable and repeatable route combining maps and GPS coordinates to know speed limits and where roads merge. Every street is known to the navigation system. It is a mistake to have a bus driver take over in emergencies. Robo-Bus must be able to handle emergencies better than a human driver. Human drivers could make a mistake like swerving to avoid a drunk driver. The Robo-Bus needs to be trained in emergency procedures."
]),
DataStoreClass("Self Driving Cars", [
"Algoflux specializes in image processing and deep learning. Image recognition has become a consumable service in the cloud. These applications run self-driving taxis and personal vehicles.",
"Vision processing is the best way to navigate because roads change and maps must be used in real time. Keeping the maps current is not a realistic approach. A vision processing system must be better than human vision to have the advantage."
]),
DataStoreClass("Warehouse", [
"Robots can palletize items onto a crate all day long. It just works. We need to change our thinking about automation—let it do its thing.",
"Robot can retrieve items from rakes by climbing the railing moving vertically and horizontally to retrieve the box."
]),
DataStoreClass("Analytics - We can outsource your analytic department", [
"AI has become an important interface for asking data analysis questions about the data. Data domains can be quickly queried by AI, and the extracted data combined with other domains of data and summarized, allowing the AI to present a visual or a voice response to questions about key indicators. The AI can learn the rules for assemblying SQL using a data warehouse star-and-snowflake architecture, much like a human being. The results can be tested for duplication and a negative result fed back into the model, limiting the poor query combinations. Likewise, the system can watch existing ERP queries that are highly used, learn from join combinations and then create a reward for finding correct results.",
"Real time process and concurrent and scalable systems are the way of the future. Avoid systems that do not offer this capability because of the legacy trap. Companies capable of real time access process a robust environment to leverage utilization of almost every conceivable business case.",
"Five years ago, I started thinking about the robot brain automation to getting business accomplished. I realized normal systems were not loosely coupled and not cohesive. Meta data was the answer, resulting from high-speed messaging. Meta data allowed state to move from system to system and get processed. Message queues and packets offered a way to connect legacy systems to ERPs through messaging. Why not expand on the idea of meta data? What if the whole world could transform its work by using messaging and high-speed, concurrent middle layers representing cohesive business logic? The business would operate like the robotic automation of a self-driving car! The move to real time makes sense because it removes the complexity and batch processing way of doing things."
]),
DataStoreClass("Safety and Quality Control - We integrate Matroid", [
"Matroid can reduce effort performing tasks that are mundane but critical to operational safety such as security monitoring, quality control and work flow inspections. Combined with drones, Matroid can receive real time feeds and send time series alerts to a calendar when certain events occur.",
"Matroid uses AI to recognize object either from a Javascript web app, uploaded image, or video stream. Matroid can localize image recognition by using multiple classifiers processing an image frame. Data APIs provide a robust way to recognize objects and people."
]),
DataStoreClass("Poultry", [
"Ai and drones can be used to identify chickens that are sick, keeping the group from becoming infected. People are eating more eggs and chicken from decade to decade. This trend seems to be on the climb."
]),
DataStoreClass("Customer Service - We integrate Rasa AI", [
"Rasa AI creates chatbots reducing the number of personnel to answer questions at the same time reducing customer frustration when they’re trying to contact some for help. When chatbot gains the capability of human comprehension in the content they read, their response will be equivalent to subject matter experts (SME) being asked the same questions over and over. Chatbots can respond in a natural way. Translation machines use deep learning to figure out how experts convert messages from one language to another. The accuracy is better through deep learning. Deep learning can absorb from expert customer service representatives and respond in an equivalent manner."
]),
DataStoreClass("Miltary Defense Paradox", [
"Could AI start World War III? Consider Elon Musk’s claims that AI could start a world war and at the same time, consider the paradox of thinking machines preventing war. Musk isn’t considering the essence of how AI works when he says AI will start World War III. Musk knows AI follows reward and policy conditioning algorithms like a dog performing tricks for a treat. Therefore, it is not unreasonable that a machine statistically watching enemy force build up could plan a first strike action in order to maximize its rewards. AI does not need to understand the cost of its actions in terms of human suffering. AI does not have emotion or empathy. It only needs to think if its action to maximize returns or rewards. AI calculates best probable outcomes to its goals.",
"AI can start a nuclear war, and AI can restrain action from starting a nuclear war. AI restraining a nuclear war is based on ethical and moral weightings that evaluate each action in terms of probable loss of life. If the moral and ethical weightings do not justify the action, the AI will decide not to act. Therefore, not to take unilateral action could be a more perfect decision, resulting in less loss of life.",
"During a nuclear crisis, information overload and weighting loss of life have already been stimulated by AI. The data has been analyzed by data scientists. Machines respond faster during a crisis than can humans. Machines handle, absorb and process large amounts of data quickly, make decisions when shortage of time matters, and they follow restraining rules on uncertainty. Machines and data scientists have already reviewed most conflict scenarios, and the results have been worked out by the numbers.",
"AI could create a golden era of peace. AI could predict where war was probable to break out and then squash the rebelling forces before they engage. AI could predict where famine, starvation and drought were coming. It could predict where rebel force build up was likely and begin delivering food, aid and desalinization remote facilities to these areas. AI could generate an era of peace and stability unlike the world has seen. This is the paradox."
])
];

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Machine Learning Integration")),
body: ListView.builder(
itemCount: lstData.length,
itemBuilder: (context, index) {
return Container(
width: 300,
padding: EdgeInsets.all(5.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ConfigurableExpansionTile(
header: Text(lstData[index].header,
style: TextStyle(fontSize: 30)),
headerExpanded: Text(lstData[index].header,
style: TextStyle(fontSize: 30)),
animatedWidgetFollowingHeader: const Icon(
Icons.expand_more,
color: Color(0xFF707070),
),
headerBackgroundColorStart: Colors.green[200],
headerBackgroundColorEnd: Colors.grey,
children: [
ConstrainedBox(
constraints: BoxConstraints(maxHeight: 200),
child: ListView.builder(
itemCount: lstData[index].items.length,
itemBuilder: (context, index2) {
return Column(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Container(
padding: EdgeInsets.all(20),
child: Text(
lstData[index]
.items[index2],
style: TextStyle(
fontSize: 20))),
SizedBox(
height: 10,
)
]);
}))
])
]));
},
));
}
}

Listview embedded in a ExpandableListActivity is only partially displayed on the screen

I was able to solve the problem by using a subclassed ListView which overrides onMeasure().

The following 2 posts were very helpful in pointing me in the right direction.

1. How do I create a ListView that's not in a ScrollView, or has the ScrollView disabled?

2. Calculate the size of a list view or how to tell it to fully expand

However, I still feel this was a bloated work around, and have no idea why the view returned by newChildView() does not allow ListView to expand fully even when android:layout_height="fill_parent" is set for the ListView and its container (LinearLayout).

It would be great, if someone can point out the reason.

Thank you.



Related Topics



Leave a reply



Submit