2012-08-30 37 views
1

我在写一个计算器应用程序,我希望能够在4种计算模式之间切换:十进制,二进制,八进制和十六进制。为了管理不同模式的不同用户界面,我的Activity中有4个片段子类。除了Activity的主XML文件外,每个Fragment都有自己的XML布局文件。我在Android Developer网站上找到了一个用于扩展Fragments布局的指南,并且我遵循了该指南。不过,我想将侦听器等添加到布局的各种组件中,最好在片段的onCreateLayout方法中,或者其他可以轻松实现并最大限度地减少代码重复的位置。动态碎片中的布局

然而,当我尝试调用findViewByID来访问其中一个膨胀视图(显然在我调用LayoutInflater.inflate之后)时,我得到一个空返回值。无论我在onCreateLayout中还是从Activity中的其他位置(理论上已创建Views之后)调用findViewByID,都会发生此问题。这里有什么问题?

我认为可能是一个问题的一个问题是,我已经重载了各种片段布局之间的视图的名称。例如,二进制布局中的“1”按钮与十六进制布局中的“1”按钮具有相同的ID。这是否允许,假设二进制和十六进制布局从来都不是同一时间的活动的一部分?

谢谢。

回答

1

我觉得在不同的布局中相同的id在Fragement中不是问题。首先,你必须抓住膨胀的视图,然后找到里面的东西。例如 -

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    view = inflater.inflate(R.layout.frg1, container, false); 
    android.util.Log.v("", "!!!!!!!!!! Frg1 !!!!!!!!!"); 


    Button b = (Button) view.findViewById(R.id.b1); 
    b.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v) { 
      Toast.makeText(getActivity(), "here", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    return view; 
} 
+0

是的,这样做。我很愚蠢,在Activity上调用findViewById,而不是在碎片树的根上。傻我。谢谢! – Ertai87

+0

wc @ user1622825 –

+0

你能投票给我吗?也请标记正确,因为这是正确的答案。 –