Android: Как обновить раскладку таблицы после удаления строки? - PullRequest
3 голосов
/ 15 апреля 2011

У меня есть таблица, которая извлекает данные из файла * .txt.Для каждой строки данных в файле txt будет одна строка данных.

Допустим, у меня есть две строки данных в файле txt прямо сейчас, имеет смысл сгенерировать две таблицы.

Затем я добавил OnLongPressListener, который при вызове удалит одну строку данных из txt-файла.

Теперь первый вопрос: после удаления данных в txt-файле как обновитьмоя таблица, чтобы отразить это изменение?

Второй вопрос: после того, как я решу свой первый вопрос, возможно ли иметь какую-то анимацию, где одна строка будет исчезать или выпадать вместо того, чтобы просто исчезнуть сразу?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 30 апреля 2012

Не уверен, если вы все еще ищете ответ. Но я наткнулся на этот пост, столкнувшись с такой же проблемой. Плюс тот факт, что я был вынужден использовать TableLayout (объем кода, написанного с использованием TableLayout, огромен, и я не был вынужден переключаться на ListView). В итоге я удалил все представления из TableLayout, используя:

`tableLayout.removeAllViews();`

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

protected static final int REFRESH = 0;

private Handler _hRedraw;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tree_view_activity);

    _hRedraw=new Handler(){
        @Override
        public void handleMessage(Message msg)
        {
            switch (msg.what) {
            case REFRESH:
                redrawEverything();
                break;
            }
        }
    };
    ...
}
private void redrawEverything()
{
    tableLayout.invalidate();
    tableLayout.refreshDrawableState();
}

Осталась только одна часть, и это та часть, где вы отправляете сообщение вашему обработчику, чтобы обновить ваш вид. Вот код для этого:

_hRedraw.sendEmptyMessage(REFRESH);
1 голос
/ 16 апреля 2011

Как правило, в onCreate () мы делаем все, что показывает пользовательский интерфейс с текстом, стараемся поместить код, который составляет пользовательский интерфейс, в закрытый метод произнесите setUpTabView () и попробуйте вызвать это из onCreate и даже попробуйте вызвать это setUpTabView () , когда текст изменился. Такой подход я сделал в виде сетки. работал очень хорошо ...!

1 голос
/ 15 апреля 2011

Почему бы не использовать ListView вместо этого?Это дает вам лучший контроль при использовании модели MVC, где есть набор данных, связанный с View.Таким образом, вы можете иметь класс, который расширяет BaseAdapter.Этот класс связывает ваши данные с View, и у этого класса также есть метод: notifyDataSetChanged(), который должен решить вашу проблему.

Вы можете найти notifyDataSetChanged пример и customListView полезно.

Дайте мне знать, если вам нужна дополнительная помощь.

...