1

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

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

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

谢谢。

4

1 回答 1

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;
}
于 2012-08-30T09:08:03.990 回答