0

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

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. Макет будет расти, когда пользователь добавит элемент с сервера (исходное значение элемента не имеет значения), и этот элемент будет горизонтальным linearlayout, с textview и edittext (item_name, item_value). Это значение может быть модифицируемым, поэтому должно быть edittext, также, этот edittext будет периодически получать значения с сервера, поэтому его можно обновить автоматически.

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

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

EDITED с модификациями:

Я изменил код таким образом:

@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 в Fragment? - И как я могу заставить объект Fragment работать с новыми данными?

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

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

ответ

2

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

getActivity().findViewById() 

смотри пример, это поможет Вам undersatand: -

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(); 
    } 
} 
+0

Отредактировано вопрос с изменением, принимая свой ответ, как пример. Благодарю. Можете ли вы помочь мне с другими вопросами? – osanfer

0

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