1
0
mirror of https://github.com/oliexdev/openScale.git synced 2025-08-23 16:53:04 +02:00

Speed up table view by using spanned string instead of HTML

This commit is contained in:
Erik Johansson
2018-02-01 21:19:01 +01:00
parent 9db1a355a3
commit 7e932b0ec1
3 changed files with 41 additions and 22 deletions

View File

@@ -28,7 +28,9 @@ import android.os.Environment;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.text.Html;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.SpannedString;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
@@ -145,7 +147,7 @@ public class TableFragment extends Fragment implements FragmentUpdateListener {
@Override
public void updateOnView(List<ScaleMeasurement> scaleMeasurementList)
{
tableDataView.setAdapter(new ListViewAdapter(new ArrayList<HashMap<Integer, String>>())); // delete all data in the table with an empty adapter array list
tableDataView.setAdapter(new ListViewAdapter(new ArrayList<HashMap<Integer, Spanned>>())); // delete all data in the table with an empty adapter array list
if (scaleMeasurementList.isEmpty()) {
return;
@@ -220,7 +222,7 @@ public class TableFragment extends Fragment implements FragmentUpdateListener {
}
}
ArrayList<HashMap<Integer,String>> dataRowList = new ArrayList<>();
ArrayList<HashMap<Integer, Spanned>> dataRowList = new ArrayList<>();
int displayCount = 0;
@@ -232,16 +234,21 @@ public class TableFragment extends Fragment implements FragmentUpdateListener {
prevScaleMeasurement = scaleMeasurementList.get(i + 1);
}
HashMap<Integer,String> dataRow = new HashMap<>();
HashMap<Integer, Spanned> dataRow = new HashMap<>();
int columnNr = 0;
dataRow.put(columnNr++, Long.toString(scaleMeasurement.getId()));
dataRow.put(columnNr++, new SpannedString(Long.toString(scaleMeasurement.getId())));
for (MeasurementView measurement : measurementsList) {
measurement.loadFrom(scaleMeasurement, prevScaleMeasurement);
if (measurement.isVisible()) {
dataRow.put(columnNr++, measurement.getValueAsString() + "<br>" + measurement.getDiffValue());
SpannableStringBuilder text = new SpannableStringBuilder();
text.append(measurement.getValueAsString());
text.append("\n");
measurement.appendDiffValue(text);
dataRow.put(columnNr++, text);
}
}
@@ -410,10 +417,10 @@ public class TableFragment extends Fragment implements FragmentUpdateListener {
private class ListViewAdapter extends BaseAdapter {
private ArrayList<HashMap<Integer, String>> dataList;
private ArrayList<HashMap<Integer, Spanned>> dataList;
private LinearLayout row;
public ListViewAdapter(ArrayList<HashMap<Integer, String>> list) {
public ListViewAdapter(ArrayList<HashMap<Integer, Spanned>> list) {
super();
this.dataList = list;
}
@@ -464,11 +471,11 @@ public class TableFragment extends Fragment implements FragmentUpdateListener {
LinearLayout convView = (LinearLayout)convertView;
HashMap<Integer, String> map = dataList.get(position);
HashMap<Integer, Spanned> map = dataList.get(position);
for (int i = 0; i< dataList.get(0).size(); i++) {
for (int i = 0; i < map.size(); i++) {
TextView column = (TextView)convView.getChildAt(i);
column.setText(Html.fromHtml(map.get(i)));
column.setText(map.get(i));
}
return convertView;

View File

@@ -248,28 +248,39 @@ public abstract class FloatMeasurementView extends MeasurementView {
}
@Override
public String getDiffValue() {
public void appendDiffValue(SpannableStringBuilder text) {
if (previousValue < 0.0f) {
return "";
return;
}
char symbol;
String color;
int color;
final float diff = value - previousValue;
if (diff > 0.0f) {
symbol = SYMBOL_UP;
color = "green";
color = Color.GREEN;
} else if (diff < 0.0f) {
symbol = SYMBOL_DOWN;
color = "red";
color = Color.RED;
} else {
symbol = SYMBOL_NEUTRAL;
color = "grey";
color = Color.GRAY;
}
return String.format(
"<font color='%s'>%s</font> <font color='grey'><small>%s</small></font>",
color, symbol, formatValue(diff));
int start = text.length();
text.append(symbol);
text.setSpan(new ForegroundColorSpan(color), start, text.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
text.append(' ');
start = text.length();
text.append(formatValue(diff));
text.setSpan(new ForegroundColorSpan(Color.GRAY), start, text.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
text.setSpan(new RelativeSizeSpan(0.8f), start, text.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
@Override

View File

@@ -23,6 +23,7 @@ import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.text.SpannableStringBuilder;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
@@ -158,7 +159,7 @@ public abstract class MeasurementView extends TableLayout {
public abstract void updatePreferences(SharedPreferences preferences);
public abstract String getValueAsString();
public String getDiffValue() { return ""; }
public void appendDiffValue(SpannableStringBuilder builder) { }
public Drawable getIcon() { return iconView.getDrawable(); }
protected boolean isEditable() {