我正在编写一个计算器应用程序,希望能够在其中切换4种计算模式:十进制、二进制、八进制和十六进制。为了管理不同模式的不同UI,我的活动中有4个Fragment子类。除了"活动"的主XML文件外,每个Fragment都有自己的XML布局文件。我在安卓开发者网站上找到了一个为碎片膨胀布局的指南,我遵循了这个指南。然而,我想将监听器等添加到布局的各个组件中,最好是在Fragment的onCreateLayout方法中,或者在其他地方,我可以轻松地做到这一点,并最大限度地减少代码重复。
然而,当我试图调用findViewByID来访问其中一个已膨胀的视图时(显然,在我调用LayoutInflater.inflate之后),我得到了一个null返回值。无论我是从onCreateLayout中调用findViewByID,还是从"活动"中的其他位置调用(理论上,在创建视图之后),都会出现此问题。这里出了什么问题?
我认为有一个问题可能是,我在各种Fragment布局之间重载了视图的名称。例如,二进制布局中的"1"按钮与十六进制布局中的"1"按钮具有相同的ID。假设二进制和十六进制布局从来都不是活动的一部分,这是允许的吗?
谢谢。
我认为不同布局中的相同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;
}