mirror of
https://github.com/oliexdev/openScale.git
synced 2025-08-23 08:43:15 +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.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,12 +417,12 @@ 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;
|
||||
this.dataList = list;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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() {
|
||||
|
Reference in New Issue
Block a user