Макет таблицы для просмотра элементов в представлении списка производительности Android - PullRequest
1 голос
/ 02 января 2012

Я пытаюсь разработать вид каналов в Facebook с использованием списка и таблицы. В каждой строке есть запись фида с комментариями в виде списка. Я храню объекты данных фида в списке массивов.

class FeedPost{
   String username;
   String imageUrl;
   String feedpostText;
   ArrayList<Comment> comments;}

На мой взгляд, я делаю так

public View getView(final int position, View convertView, ViewGroup parent) {
    feedItem = FeedItems.get(position);

   convertView = layoutInflater.inflate(R.layout.feed_main, null);
   TableLayout mainFeedLayout = (TableLayout) convertView
      .findViewById(R.id.blogFeedTableLayout);

   TextView displayName = (TextView) convertView
               .findViewById(R.id.feed_username);
   TextView description = (TextView) convertView
                     .findViewById(R.id.comment_text);

    // Set the text to the texview
       .
       .
       .

    // Adding comments to the feed
   for (int i = 0; i < feedItem.feedComments.size(); i++) {
       mainFeedLayout .addView(addComment(
      convertView, feedItem.feedComments.get(i)));
     }

    }

Опять же в функциях addcomments я раздуваю макет комментария, чтобы его можно было добавить к макету таблицы

Таким образом, чтобы один вид канала отображался в виде списка, я проверяю каждый элемент канала на наличие комментариев и отображаю их в канале. Это действительно больно и медленно.

Я пытался использовать статические держатели для макетов вместо того, чтобы каждый раз накачивать их. Опять же, это не сработало. Если есть несколько разных представлений, то я бы попробовал "SackOfViewsAdapter" из comonsguy. Но на самом деле это не разные взгляды.

Я думаю, что Facebook использует веб-просмотр и отображает HTML для отображения каналов пользователя. Каков наилучший способ сделать то же самое, используя родной макет Android и код. Можете ли вы помочь мне предложить лучший метод для отображения такого рода сложных данных?

Ответы [ 2 ]

1 голос
/ 03 января 2012

Это моя реализация.Я удалил много просмотров, просто хотел показать, как можно повторно использовать удаленный просмотр изображений (из Ignition / Droid-fu).

0 голосов
/ 02 января 2012

Две вещи: Повторно используйте представления и создайте Asynctask для загрузки канала (переместите канал и for для задачи).Таким образом, вы не будете душить поток пользовательского интерфейса.

Я приказываю повторно использовать виды легко.Примерно так:

if (convertView == null) {
            row = (LinearLayout) LayoutInflater.from(this.context).inflate(R.layout.account, parent, false);
            } else {
            row = (LinearLayout) convertView;
            }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...