Как динамически заполнить макет фрагмента?

У меня есть фрагмент с его классом:

public class FormatShortFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.bag_format_short, container, false);

        return rootView;
    }
}

И это его макет:

<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="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </LinearLayout>
</RelativeLayout>

Этот фрагмент показан с помощью FragmentPageAdapter. Макет будет расти, когда пользователь добавит элемент с сервера (происхождение элемента не имеет значения), и этот элемент будет горизонтальным линейным макетом с textview и edittext (item_name, item_value). Это значение может быть изменяемым, поэтому это должен быть текст редактирования, также этот текст редактирования будет периодически получать значения от сервера, поэтому может обновляться автоматически.

После объяснения этого, как я могу динамически добавить этот linearLayouts и его подпредставления в GUI? и когда я должен обновить интерфейс?

Большое спасибо, любая помощь получена, я действительно потерян на этом на этих темах.

ИЗДАНО С ИЗМЕНЕНИЯМИ:

Я изменил код следующим образом:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.bag_format_short, container, false);

    return rootView;
}
@Override
public void onResume() {
    super.onResume();
    LinearLayout parentLinear = (LinearLayout) getActivity().findViewById(R.id.short_container);
    for (int i = 1; i<10; i++ ){
        LinearLayout innerLinear = (LinearLayout) new LinearLayout(getActivity());
        TextView itemName = new TextView(getActivity());
        itemName.setText("Nombre");
        EditText itemValue = new EditText(getActivity());
        itemValue.setText("Valor");
        innerLinear.addView(itemName);
        innerLinear.addView(itemValue);
        parentLinear.addView(innerLinear);
    }
}

@Override
public void onStart() {
    super.onStart();
}

@Override
public void onStop() {
    super.onStop();
}

И макет фрагмента был изменен следующим образом:

<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="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">

<LinearLayout
    android:id="@+id/short_container"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
</LinearLayout>
</RelativeLayout>

Теперь макет растет в каждой итерации.

На данный момент у меня есть другие проблемы, я надеюсь, вы можете помочь мне с этим. Я могу создать объект LayouParams с атрибутами, такими как гравитация или вес? Передать данные из MainActivity во фрагмент? - И как я могу заставить представление фрагмента загружаться с новыми данными?

Также мне нужно знать, как связать событие clickListener с программно добавленными linearLayouts, мне нужно изменить некоторые значения на сервере в зависимости от имени и отредактированного значения.

Большое спасибо за это, вы спасаете мою жизнь.

2 ответа

Решение

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

 getActivity().findViewById() 

Смотрите пример, это поможет вам недоедать:

public class FragmentTab3 extends SherlockFragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragmenttab3, container, false);
        return rootView;
    }

    @Override
    public void onResume() {
        super.onResume();
    }


    @Override
    public void onStart() {
        super.onStart();


    LinearLayout linear = (LinearLayout) getActivity().findViewById(R.id.linear);
        Button button = new Button(getActivity());
        button.setText("Click Me");
        linear.addView(button);
    }

    @Override
    public void onStop() {
        super.onStop();
    }
}

Если вы хотите добавить подпредставление в макет динамически, взгляните на RecyclerView в документации Android. Похоже, что вы ищете.