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

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

我认为可能是一个问题,就是我在各种Fragment布局之间重载了Views的名称。例如,二进制布局中的“ 1”按钮与十六进制布局中的“ 1”按钮具有相同的ID。假设Binary和Hex布局从不同时属于Activity的一部分,是否可以这样做?

谢谢。

最佳答案

我认为不同布局中的相同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;
}

10-06 14:00
查看更多