Почему мой foreach ломается, когда я пытаюсь рисовать динамические кнопки в Kotlin?

Это решение обнаруживает эти 4 случая

. Полный класс находится в

https://github.com/pedro-vicente/csv-parser

1,field 2,field 3,
1,field 2,"field 3 quoted, with separator",
1,field 2,"field 3
with newline",
1,field 2,"field 3
with newline and separator,",

Он читает символ файла по символу и читает по 1 строке за один раз вектору (строк), поэтому подходит для очень больших файлов.

Использование

Итерация до тех пор, пока не будет возвращена пустая строка (конец файла). Строка представляет собой вектор, в котором каждая запись представляет собой столбец CSV.

read_csv_t csv;
csv.open("../test.csv");
std::vector row;
while (true)
{
  row = csv.read_row();
  if (row.size() == 0)
  {
    break;
  }
}

объявление класса

class read_csv_t
{
public:
  read_csv_t();
  int open(const std::string &file_name);
  std::vector read_row();
private:
  std::ifstream m_ifs;
};

реализация

std::vector read_csv_t::read_row()
{
  bool quote_mode = false;
  std::vector row;
  std::string column;
  char c;
  while (m_ifs.get(c))
  {
    switch (c)
    {
      /////////////////////////////////////////////////////////////////////////////////////////////////////
      //separator ',' detected. 
      //in quote mode add character to column
      //push column if not in quote mode
      /////////////////////////////////////////////////////////////////////////////////////////////////////

    case ',':
      if (quote_mode == true)
      {
        column += c;
      }
      else
      {
        row.push_back(column);
        column.clear();
      }
      break;

      /////////////////////////////////////////////////////////////////////////////////////////////////////
      //quote '"' detected. 
      //toggle quote mode
      /////////////////////////////////////////////////////////////////////////////////////////////////////

    case '"':
      quote_mode = !quote_mode;
      break;

      /////////////////////////////////////////////////////////////////////////////////////////////////////
      //line end detected
      //in quote mode add character to column
      //return row if not in quote mode
      /////////////////////////////////////////////////////////////////////////////////////////////////////

    case '\n':
    case '\r':
      if (quote_mode == true)
      {
        column += c;
      }
      else
      {
        return row;
      }
      break;

      /////////////////////////////////////////////////////////////////////////////////////////////////////
      //default, add character to column
      /////////////////////////////////////////////////////////////////////////////////////////////////////

    default:
      column += c;
      break;
    }
  }

  //return empty vector if end of file detected 
  m_ifs.close();
  std::vector v;
  return v;
}

0
задан marc_s 19 May 2019 в 06:46
поделиться

1 ответ

Подсказка показывает только одну кнопку. Вы пытаетесь раздуть один и тот же вид дважды в одном и том же месте.

Вам нужно добавить пустой линейный макет в ваш XML. И в вашем цикле поменяйте кнопку ..

var btnZone = findViewById(R.layout.btnZone) 
button.text = "Pair"
btnZone.addView(button, layoutParams)

Это не точный код (и, возможно, даже не правильный синтаксис), но он показывает, как вам нужно изменить цикл.

В основном вы пытались раздуть один и тот же экземпляр того же представления. Когда на самом деле вы не раздуваете какие-либо взгляды, вы просто добавляете взгляды.

Примечание. Если у вас есть линейный макет в XML, когда вы добавляете в него другой вид кнопки, он добавит его под ним. Если вы установите горизонтальную ориентацию макета, вид кнопки будет добавлен к другому.

вот ссылка на пример. Извините, я должен убедиться, что мой код соответствует вашему коду и переменным с правильным синтаксисом, но я на работе.

0
ответ дан Vahalaru 19 May 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: