2016-11-20 4 views
0

Мне удалось манипулировать текстом существующего TextView во фрагменте. Однако я не смог программно добавить новый ProgressBar в существующий макет.
В классе Фрагмент:Добавить ProgressBar программно к фрагменту в Android

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_completed_office_hours, container, false); 

     LinearLayout linearLayout = (LinearLayout) view.findViewById(R.id.linearLayoutCompletedOfficeHours); 

     progressBar = new ProgressBar(this.getContext()); 
     progressBar.setMax(daysInTotal); 
     progressBar.setProgress(daysCompleted); 

     linearLayout.addView(progressBar); 

     TextView textView = (TextView) view.findViewById(R.id.completedXOfYDays); 
     textView.setText(daysCompleted + "/" + daysInTotal); 
     return view; 
    } 

XML-:

<FrameLayout 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" 
    tools:context=".fragment.CompletedOfficeHoursFragment"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="@dimen/activity_horizontal_margin" 
     android:orientation="horizontal" 
     android:id="@+id/linearLayoutCompletedOfficeHours"> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/completedXOfYDays" /> 
    </LinearLayout> 
</FrameLayout> 

При выполнении его я получаю 19/299 как текст, но без каких-либо ProgressBar. Что я делаю неправильно =

ответ

0

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

Необходимо указать параметры макета детского вида, который вы хотите прикрепить.

progressBar = new ProgressBar(this.getContext()); 
progressBar.setMax(daysInTotal); 
progressBar.setProgress(daysCompleted); 
progressBar.setLayoutParams(new LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT)); 
+0

К сожалению, это не решает проблему –

0

Вы указали «linearLayoutCompletedOfficeHours» в качестве линейного макета с android:orientation="horizontal" и дали TextView android:layout_width="match_parent" .Making это сделает TextView занять все пространство и ProgressBar создаются и отображаются на экране. Вместо этого измените ширину текста до android:layout_width="wrap_content", и прогресс будет виден.

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:id="@+id/completedXOfYDays" /> 
Смежные вопросы