动态片段中的布局

时间:2012-08-30 06:39:00

标签: android android-layout

我正在编写一个计算器应用程序,我希望能够在4种计算模式之间切换:十进制,二进制,八进制和十六进制。为了管理不同模式的不同UI,我的Activity中有4个Fragment子类。除了Activity的主XML文件之外,每个Fragment都有自己的XML布局文件。我在Android开发者网站上找到了一个用于扩展Fragments布局的指南,我已经按照该指南进行了操作。但是,我想将侦听器等添加到布局的各个组件中,最好是在Fragment的onCreateLayout方法中,或者在其他我可以轻松完成的地方,并最大限度地减少代码重复。

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

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

感谢。

1 个答案:

答案 0 :(得分:1)

我认为不同布局中的相同ID在Fragment中不是问题。首先,你必须抓住膨胀的视图然后在其中找到任何内容。例如 -

@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;
}