Я пытаюсь разработать вид каналов в 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 и код.Можете ли вы помочь мне предложить лучший метод для отображения такого рода сложных данных?