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:
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
@@ -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() {
|
||||||
|
Reference in New Issue
Block a user