0

Итак, после долгих смешных прыжков с обручами и общего контортиона, я убедил Android выполнить элементарную и часто требуемую задачу. То есть генерировать нуль для любого количества просмотров с любым количеством различных макетов и связанных переменных и вставлять их в другое представление, чтобы они складывались вертикально.Вертикальные макеты с динамически генерируемыми вложенными фрагментами в Android

Ну почти.

Android неохотой согласился включить все мнения после того как я прочитал и изменил код из this question.

public void setPeriods(ArrayList <HashMap> periods) { 
    for(HashMap<String, Object> period: periods){ 
     FragmentManager childFragMan = getChildFragmentManager(); 

     FragmentTransaction childFragTrans = childFragMan.beginTransaction(); 
     ForecastPeriod forecastPeriod = new ForecastPeriod(); 
     childFragTrans.add(R.id.forecast_period, forecastPeriod); 
     childFragTrans.commit(); 
     forecastPeriod.setTitle((String)period.get("name")); 
    } 
} 

Проблема заключается в том, что мнения не складывается, или, по крайней мере, Android, как будто насмехаться надо мной «сложены «они, но на плоскости Z, чтобы они полностью перекрывали друг друга. Как это может быть?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:paddingTop="20dp" 
    android:paddingLeft="20dp" 
    android:paddingRight="20dp" 
    android:paddingBottom="0dp" 
    tools:context="com.blah.deblah.ForecastPeriods"> 

    <fragment 
     android:id="@+id/forecast_period" 
     android:name="com.blah.deblah.ForecastPeriod" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     tools:layout="@layout/fragment_forecast_period" /> 

</LinearLayout> 

Как я могу изменить (надеюсь) XML, чтобы эти парни располагались вертикально так, как должны?

Ниже приведен XML для вставляемого фрагмента.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    tools:context="com.blah.deblah.ForecastPeriod"> 

     <TextView 
      android:id="@+id/period_title" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="top|center" 
      android:fontFamily="sans-serif-bold" 
      android:gravity="start" 
      android:singleLine="true" 
      android:text="@string/title" 
      android:textColor="#cccccc" 
      android:textSize="24dp" /> 

     <TextView 
      android:id="@+id/period_headline" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="top|center" 
      android:layout_below="@id/period_title" 
      android:layout_marginTop="20dp" 
      android:fontFamily="sans-serif-light" 
      android:maxHeight="90dp" 
      android:gravity="left" 
      android:text="@string/loremipsum" 
      android:textColor="#cccccc" 
      android:textSize="24dp" /> 

     <TextView 
      android:id="@+id/period_body" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="top|center" 
      android:layout_below="@id/period_headline" 
      android:layout_marginTop="20dp" 
      android:fontFamily="sans-serif-light" 
      android:gravity="left" 
      android:text="@string/loremipsum" 
      android:textColor="#cccccc" 
      android:textSize="18dp" /> 

</RelativeLayout> 

ответ

1

Причина, по которой у вас возникает такая большая проблема, заключается в том, что ваше понимание Фрагментов в корне неверно. Обратитесь к this question, который я поставил, когда у меня возникли проблемы с их пониманием, а также сильно расчистил все это. Android просто не хочет, чтобы вы использовали Фрагменты, как вы пытаетесь, поэтому, конечно, он не будет делать то, что вы ожидаете.

В целом, фрагмент не обязательно должен быть единым компонентом пользовательского интерфейса, а скорее скорее функцией, чем действительностью, которая больше похожа на любой другой компонент пользовательского интерфейса, что делает его гораздо более полезным. То, что вы пытаетесь использовать Fragment as, должно действительно выполняться с помощью пользовательского View или ListView.

В стороне, вы также неправильно заявляете свой фрагмент в своем коде. Вы должны либо использовать имя пакета как тег XML, либо FrameLayout и вставить свой фрагмент в указанный FrameLayout, а не <fragment>

+0

Ну, я вижу вашу точку зрения, хотя я осмеливаюсь, что существование действий и фрагментов задает вопрос о том, почему существуют два вида деятельности и почему вы не сможете достичь всех одинаковых целей путем подклассификации представлений, как в iOS. – NFG

+0

Ну для одного, и это касается всех языков программирования, Android - Android. Это не iOS, поэтому не стоит думать об этом с точки зрения iOS. Посмотрите на него отдельно и попытайтесь понять, что такое Android и как он работает, потому что это другая операционная система и поэтому должна рассматриваться как таковая. – cjbrooks12

+0

Действительно, заменяя фрагменты представлениями и вставляя их в ViewGroup, работала точно по желанию. Благодарю. – NFG

Смежные вопросы