2012-03-03 78 views
0

這裏我的代碼:addView()來inflateLayout

 LinearLayout ll = (LinearLayout) View.inflate(TabAndPlay.this, R.layout.current_play, null); 

     TextView tv = new TextView(TabAndPlay.this); 
     tv.setText("hallo"); 
     tv.setBackgroundColor(Color.GRAY); 
     ll.addView(tv); 

current_play.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/aktuelle_spiele" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 

</LinearLayout> 

R.id.llPlay(有XML顯示左右)

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="5dip"> 

     <LinearLayout 
      android:id="@+id/llPlay" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="vertical" > 

     </LinearLayout> 

    </ScrollView> 

</LinearLayout> 

這裏是onOptionsItemSelected()

 case R.id.current_play: 
      LinearLayout mainLayout = (LinearLayout) findViewById(R.id.llPlay); 
      mainLayout.removeAllViews(); 
      LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      inflater.inflate(R.layout.current_play, mainLayout, true); 
      return true; 

如果我點擊我的菜單項,我的所有當前視圖R.id.llPlays被刪除! 顯示current_play中的按鈕。但從「這裏我的代碼」的TextView不顯示.. 爲什麼?我的錯誤是什麼?

回答

0

你的問題是不明確的,所以我會猜一個答案:

在你onOptionsItemSelected()您搜索LinearLayout與ID R.id.llPlay並從它的所有子視圖與removeAllViews()然後膨脹R.layout.current_play和縱橫佈局使LinearLayoutaktuelle_spiele)與Button,而且還有TextView(爲此設置文本「Hallo」)。問題是,當你膨脹一個佈局時,你只會膨脹那個佈局上的視圖。如果你希望你的佈局也包含您在代碼構建TextView那麼你有2種選擇:

1添加TextView直接在current_play.xml佈局,並添加一個ID,所以你可以在以後檢索TextView(蒙山findViewById(R.id.the_text)),並設置文本爲「你好」:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/aktuelle_spiele" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 
    <TextView 
     android:id="@+id/the_text" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" />  
</LinearLayout> 

編輯:

2然後動態地在要建立佈局,而是保持對這個inflat參考編輯視圖。所以,如果你創建這樣一個觀點:

LinearLayout ll = (LinearLayout) View.inflate(TabAndPlay.this, R.layout.current_play, null); 
     TextView tv = new TextView(TabAndPlay.this); 
     tv.setText("hallo"); 
     tv.setBackgroundColor(Color.GRAY); 
     ll.addView(tv); 

然後按住參考該充氣視圖ll並在onOptionsItemSelected()回調傳遞到主佈局:

case R.id.current_play: 
      LinearLayout mainLayout = (LinearLayout) findViewById(R.id.llPlay); 
      mainLayout.removeAllViews(); 
      mainLayout.add(ll); 
      return true; 
+0

感謝,而是直接在current_play不明白,因爲我得到的動態textviews。我喜歡動態創建一個或多個佈局(這不是顯示),如果用戶選擇菜單(R.id.current_play)比我想要顯示的佈局,我已經createt bevor .. – StefMa 2012-03-03 15:29:04

+0

@IceClaw然後選項2是爲您。我已經更新了我的答案。 – Luksprog 2012-03-03 15:37:31

0

你忘了佈局PARAMS爲那個textview。

LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(wrap_content,wrap_content); 

然後同時加入

ll.addView(tv);