2015-04-23 70 views
1

我已經查看了大約12個SO帖子,並閱讀了關於活動和片段的文檔。動態地將視圖添加到片段之外OnCreateView調用

我有什麼我認爲是一個令人難以置信的常見問題,但也許我失去了一些基本的東西。

我有一個片段。這個片段是從Java而不是從XML創建它的視圖。在運行期間,我想向它添加一個圖像。我試着將視圖添加到viewgroupd中,創建一個LinearLayout並將其添加到視圖中,還有一些其他的東西,但都沒有工作。我經常崩潰(沒有錯誤日誌:?()

這是我最好的嘗試代碼:

iImage image = new iImage(getActivity()); 
image.setImageResource(R.drawable.image); 
LinearLayout.LayoutParams imageParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 
image.setLayoutParams(imageParams); 
((ViewGroup)getFragmentManager().findFragmentById(resourceId).getView()).addView(image); 

如果你可以告訴我怎麼可以再補充一個觀點的片段,我將不勝感謝它!

回答

2

你有一個令人難以置信的常見問題。解決方案是保留一個私有變量到你膨脹的視圖,你可以稍後使用它......在這個例子中,我假設你的根佈局(XML中最頂層的元素)是LinearLayout

public class DummyFragment extends Fragment { 

    private LinearLayout root; 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     LinearLayout = (LinearLayout) inflater.inflate(R.layout.dummy_fragment_layout, container, false); 
     return root; 
    } 

} 
+0

但是我不能動態訪問它嗎?我爲什麼要存儲它?我需要以這種方式誇大觀點嗎? – Aggressor

+0

你不需要膨脹onCreateView中的視圖... onCreateView只是一個被activity調用的方法來告訴你的片段準備它的初始佈局。你只需要返回一個視圖。在那裏你可以創建一個虛擬的視圖組並保存對它的引用供以後使用,然後你可以動態地爲它添加視圖。但是由於大多數人使用XML來佈局他們的佈局,谷歌很友善地向我們提供了一個inflater –

+0

好吧,我認爲我們正在到達某個地方。唯一的看法是抽象。我無法將視圖添加到視圖。它需要是一些東西?我試圖將它視爲ViewGroup,但它不起作用。 – Aggressor

相關問題