Facebook как вид каналов с просмотра списка и просмотра таблицы Android - PullRequest
3 голосов
/ 02 января 2012

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

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

Класс комментариев выглядит следующим образом

class Comment{
     String imageUrl;
    String username;
    String Text;
    }

Теперь я буду отображать данные в виде таблицы элементов вида.Это примерно так:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/FeedTableLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >

<RelativeLayout
    android:id="@+id/feed_container"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

 <TextView android:id="@+id/FeedPostusername"  android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>

 <TextView android:id="@+id/FeedPostText"  android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>

</RelativeLayout>
</TableLayout>

Приведенный выше блок кода представляет собой макет элемента в просмотре списка.Это показывает основной контент канала.Теперь чтобы показать комментарии к ленте.У меня есть другой макет с другим дизайном и изображением.Пример макета

 <RelativeLayout
    android:id="@+id/feed_container"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >
  <ImageView android:id="@+id/CommentPic"  android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>

 <TextView android:id="@+id/Commentusername"  android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>

 <TextView android:id="@+id/CommentText"  android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>

</RelativeLayout>

Все данные, относящиеся к фидам и комментариям, хранятся в главном массиве

ArrayList<FeedPost> TotalFeed = new ArrayList<FeedPost>();

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

Так что мой getview () в адаптере будет выглядеть так

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)));
     }

 }

addcomment - это функция, которая используется для добавления комментариев к ленте

private View addComment(View view, Comment comment) {
    View commentLayout = View.inflate(mContext, R.layout.comment, null);


        ImageView pic = (ImageView) commentLayout
                .findViewById(R.id.pic);
        TextView userName = (TextView) commentLayout
                .findViewById(R.id.comment_username);
        TextView commentText = (TextView) commentLayout
    }

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

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

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

...