2013-07-22 2 views
0

У меня есть 3 макета. fragment_tag, fragment_stunde и fragment_fachЧто делать в методе Fragment onCreateView?

fach должны быть в stunde и stunde в tag.

И в fach есть некоторые TextView s Я хочу установить текст.

Так что мой код до сих пор:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     LinearLayout tag = (LinearLayout)inflater.inflate(R.layout.fragment_tag, container, true); 

     database = new Database(context); 

     database.open(); 

     for (int j = 1; j < 12; j++) { 
      LinearLayout stunde = (LinearLayout) inflater.inflate(R.layout.fragment_stunde, tag, true); 
      String[][] vplanDaten = database.getVplan(Integer.valueOf(DateHelper.get(DateHelper.WEEK_OF_YEAR)), index + 1, j); 

      for (int k = 0; k < vplanDaten.length; k++) { 
       LinearLayout fach = (LinearLayout) inflater.inflate(R.layout.fragment_fach, stunde, true); 

       TextView fach_lehrer = (TextView) fach.findViewById(R.id.textView_lehrer); 
       TextView fach_fach = (TextView) fach.findViewById(R.id.textView_fach); 
       TextView fach_raum = (TextView) fach.findViewById(R.id.textView_raum); 

       fach_lehrer.setText(vplanDaten[k][0]); 
       fach_fach.setText(vplanDaten[k][1]); 
       fach_raum.setText(vplanDaten[k][2]); 
      } 
     } 
     database.close(); 
     return tag; 
    } 

Но это дает мне ошибку:

java.lang.ClassCastException: android.support.v4.view.ViewPager cannot be cast to android.widget.LinearLayout 
     at de.MayerhoferSimon.Vertretungsplan.TagFragment.onCreateView(TagFragment.java:56) 

Так как я должен изменить код, что то, что я хочу сделать, происходит?

ответ

1

Попробуйте сделать следующие изменения:

LinearLayout tag = (LinearLayout)inflater.inflate(R.layout.fragment_tag, container, true); 

к:

LinearLayout tag = (LinearLayout)(inflater.inflate(R.layout.fragment_tag, null)).findViewById(R.id.idOfTag); 

Аналогично:

LinearLayout stunde = (LinearLayout) inflater.inflate(R.layout.fragment_stunde, tag, true); 

к:

LinearLayout stunde = (LinearLayout)(inflater.inflate(R.layout.fragment_stunde, null)).findViewById(R.id.idOfStunde); 

А:

LinearLayout fach = (LinearLayout) inflater.inflate(R.layout.fragment_fach, stunde, true); 

к:

LinearLayout fach = (LinearLayout)(inflater.inflate(R.layout.fragment_fach, null)).findViewById(R.id.idOfFach); 
+0

, а не просто вызвать '' 'ViewGroup.addView()' ''? – maysi

+1

@Simon no. Как вы сказали, 'fach должен быть в stunde и stunde в tag' ->' stunde.addView (fach); '' tag.addView (stunde); '<- И вы уже возвращаете' tag'. – Vikram

+0

хорошо спасибо. это сработало :) – maysi

0

изменить LinearLayout на вид вроде такого:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View tag = inflater.inflate(R.layout.fragment_tag, container, true); 
     //Everything else... 
    return tag; 
} 

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

+0

, но я также нужен новый созданный макет из 2 других соображений. – maysi

+0

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