2013-07-07 91 views
0

所以,我的片段活動從另一個片段獲取一些[來自名稱數組的字符串]。而且我有很多XML佈局,名稱都是[來自同一個數組]。 例如,如果活動獲得字符串「狗」,我希望它設置/顯示dogs.xml佈局。根據字符串選擇佈局

很明顯,我不能做到這一點:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    String LAYOUT_NAME = getArguments().getString("layout_name"); 
    View v = inflater.inflate(R.layout.LAYOUT_NAME, container, false); 
    return v; 
} 

當然,我可以把它與開關/外殼工作,但我敢肯定,這是可能的代碼時我想象的方式。謝謝你的幫助。

回答

0

這是你在找什麼:

int id= getResources().getIdentifier(LAYOUT_NAME, "layout", getPackageName()); 

(我將不會使用變量的完整大寫名稱)

+0

非常感謝,那很好! –

0

使用onCreateView()表示您引用您的片段代碼,而不是活動的。最簡單的方法是使用setArguments()將該字符串傳遞給片段。然後你就可以在你的片段做,檢查值和膨脹佈局合理,只要你想

編輯

public Integer getLayoutIdByName(String name) { 
    Integer layoutId = null; 

    try { 
     Class res = R.layout.class; 
     Field field = res.getField(name); 
     layoutId = field.getInt(null); 
    } 
    catch (Exception e) { 
     // no such layout 
    } 

    return layoutId; 
} 
+0

是的,我寫了它的片段活動,並沒有問題得到該字符串。問題是使用這個字符串AS佈局名稱,例如如果string =「dogs」 - 打開dogs.xml –

+0

這可以完成(請參閱編輯的答案),但可以有多少個不同的字符串? 10?如果是這樣,只要簡單地說'if/else'構造 –

0

如何按名稱加載佈局:

setContentView(getResources().getIdentifier("name_of_layout", "layout", "yourpackagename"),); 

但要小心。這可能會失敗,如果你obsfucate你的應用程序。