private void addTableRow(TableLayout table, String parameter, String value) {

    TableRow row = new TableRow(table.getContext());

    TableRow.LayoutParams trParams = new TableRow.LayoutParams();
    trParams.setMargins(2, 2, 2, 1);
    row.setLayoutParams(trParams);
    row.setBackgroundColor(Color.rgb(0x00, 0x00, 0x00));

    TextView text1 = new TextView(row.getContext());
    text1.setTextSize(18);
    text1.setText(parameter);
    text1.setBackgroundColor(Color.rgb(0x18, 0x18, 0x18));
    text1.setLayoutParams(trParams);
    text1.setPadding(5, 0, 0, 0);
    row.addView(text1);

    TextView text2 = new TextView(row.getContext());
    text2.setTextSize(18);
    text2.setText(value);
    text2.setBackgroundColor(Color.rgb(0x18, 0x18, 0x18));
    text2.setLayoutParams(trParams);
    text2.setPadding(5, 0, 0, 0);
    row.addView(text2);

    table.addView(row);
  }
  // suppress this error message to be able to use spaces in higher api levels
  @SuppressLint("NewApi")
  public void refresh() {

    if (mAdapter == null) {
      mAdapter = new StackAdapter(mContext, mStacks, mSwipeable);
      if (mListView != null) {
        mListView.setAdapter(mAdapter);
      } else if (mTableLayout != null) {
        TableRow tr = null;
        for (int i = 0; i < mAdapter.getCount(); i += mColumnNumber) {
          // add a new table row with the current context
          tr = new TableRow(mTableLayout.getContext());
          tr.setOrientation(TableRow.HORIZONTAL);
          tr.setLayoutParams(
              new TableRow.LayoutParams(
                  TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT));
          // add as many cards as the number of columns indicates per row
          for (int j = 0; j < mColumnNumber; j++) {
            if (i + j < mAdapter.getCount()) {
              View card = mAdapter.getView(i + j, null, tr);
              if (card.getLayoutParams() != null) {
                card.setLayoutParams(
                    new TableRow.LayoutParams(
                        card.getLayoutParams().width, card.getLayoutParams().height, 1f));
              } else {
                card.setLayoutParams(
                    new TableRow.LayoutParams(
                        TableRow.LayoutParams.MATCH_PARENT,
                        TableRow.LayoutParams.WRAP_CONTENT,
                        1f));
              }
              tr.addView(card);
            }
          }
          mTableLayout.addView(tr);
        }
        if (tr != null) {
          // fill the empty space with spacers
          for (int j = mAdapter.getCount() % mColumnNumber; j > 0; j--) {
            View space = null;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
              space = new Space(tr.getContext());
            } else {
              space = new View(tr.getContext());
            }
            space.setLayoutParams(
                new TableRow.LayoutParams(
                    TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
            tr.addView(space);
          }
        }
      }
    } else {
      mAdapter.setSwipeable(mSwipeable); // in case swipeable changed;
      mAdapter.setItems(mStacks);
    }
  }
  public TableRow createRow(
      View image, String appName, String date, Double value, String reason, Context activity) {
    TableRow row = new TableRow(activity);
    row.setGravity(Gravity.CENTER);

    image.setPadding((int) (ratio * 10), 0, (int) (ratio * 15), 0);
    ((LinearLayout) image).setGravity(Gravity.LEFT);

    LinearLayout img = new LinearLayout(row.getContext());
    img.setLayoutParams(
        new LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
    img.setOrientation(LinearLayout.HORIZONTAL);
    img.setGravity(Gravity.CENTER);
    img.addView(image);

    row.addView(
        img, new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, (int) (ratio * 70)));

    LinearLayout main = new LinearLayout(row.getContext());
    main.setLayoutParams(
        new LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
    main.setOrientation(LinearLayout.VERTICAL);

    TextView appname = new TextView(activity);
    appname.setText(appName);
    appname.setPadding(0, 0, 0, 0);
    appname.setTextColor(Color.parseColor("#545859"));
    appname.setMaxLines(1);
    appname.setTextSize(16);
    appname.setLayoutParams(
        new LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));

    TextView movdate = new TextView(activity);
    // PARSE DATE AND SET TEXTVIEW
    try {
      SimpleDateFormat curFormater = new SimpleDateFormat("d-MMM-y HH:mm:ss", Locale.ENGLISH);
      curFormater.setTimeZone(TimeZone.getTimeZone("GMT"));
      Date endDate = curFormater.parse(date);
      curFormater.setTimeZone(TimeZone.getDefault());

      movdate.setText(
          DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.getDefault())
              .format(endDate));
      movdate.setPadding(0, 0, 0, 0);
      movdate.setTextColor(Color.parseColor("#787A77"));
      movdate.setTextSize(12);
    } catch (Exception e) {
      e.printStackTrace();
    }
    movdate.setLayoutParams(
        new LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));

    TextView movreason = new TextView(activity);
    Field field;
    try {
      field = (R.string.class.getField(reason));
      movreason.setText(activity.getString(field.getInt(R.string.class)));
    } catch (SecurityException e) {
    } catch (NoSuchFieldException e) {
    } catch (IllegalArgumentException e) {
    } catch (IllegalAccessException e) {
    }

    movreason.setPadding(0, 0, 0, 0);
    movreason.setTextColor(Color.parseColor("#545859"));
    movreason.setMaxLines(2);
    movreason.setTextSize(12);
    movreason.setLayoutParams(
        new LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));

    main.addView(appname);
    main.addView(movdate);
    main.addView(movreason);

    row.addView(
        main,
        new TableRow.LayoutParams(
            TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));

    LinearLayout position = new LinearLayout(row.getContext());
    position.setGravity(Gravity.CENTER);

    TextView movvalue = new TextView(activity);
    String textvalue;
    if (value > 0) textvalue = "+" + value; // String.format("%02d", (int)value);
    else textvalue = value.toString(); // String.format("%02d", (int)value);
    movvalue.setText(textvalue);
    movvalue.setPadding(0, 0, 0, 0);
    movvalue.setTextColor(Color.GRAY);
    movvalue.setTextSize(30);
    position.addView(movvalue);

    TableRow.LayoutParams params =
        new TableRow.LayoutParams(
            TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT);
    params.setMargins(0, 0, 10, 0);
    row.addView(position, params);

    return row;
  }