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.preference.PreferenceManager;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat; 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.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -145,7 +147,7 @@ public class TableFragment extends Fragment implements FragmentUpdateListener {
@Override @Override
public void updateOnView(List<ScaleMeasurement> scaleMeasurementList) 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()) { if (scaleMeasurementList.isEmpty()) {
return; 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; int displayCount = 0;
@@ -232,16 +234,21 @@ public class TableFragment extends Fragment implements FragmentUpdateListener {
prevScaleMeasurement = scaleMeasurementList.get(i + 1); prevScaleMeasurement = scaleMeasurementList.get(i + 1);
} }
HashMap<Integer,String> dataRow = new HashMap<>(); HashMap<Integer, Spanned> dataRow = new HashMap<>();
int columnNr = 0; int columnNr = 0;
dataRow.put(columnNr++, Long.toString(scaleMeasurement.getId())); dataRow.put(columnNr++, new SpannedString(Long.toString(scaleMeasurement.getId())));
for (MeasurementView measurement : measurementsList) { for (MeasurementView measurement : measurementsList) {
measurement.loadFrom(scaleMeasurement, prevScaleMeasurement); measurement.loadFrom(scaleMeasurement, prevScaleMeasurement);
if (measurement.isVisible()) { 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,12 +417,12 @@ public class TableFragment extends Fragment implements FragmentUpdateListener {
private class ListViewAdapter extends BaseAdapter { private class ListViewAdapter extends BaseAdapter {
private ArrayList<HashMap<Integer, String>> dataList; private ArrayList<HashMap<Integer, Spanned>> dataList;
private LinearLayout row; private LinearLayout row;
public ListViewAdapter(ArrayList<HashMap<Integer, String>> list) { public ListViewAdapter(ArrayList<HashMap<Integer, Spanned>> list) {
super(); super();
this.dataList =list; this.dataList = list;
} }
@Override @Override
@@ -464,11 +471,11 @@ public class TableFragment extends Fragment implements FragmentUpdateListener {
LinearLayout convView = (LinearLayout)convertView; 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); TextView column = (TextView)convView.getChildAt(i);
column.setText(Html.fromHtml(map.get(i))); column.setText(map.get(i));
} }
return convertView; return convertView;

View File

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

View File

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