我正在编写一个计算器应用程序,在其中我希望能够在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;
}