Android fragments 以编程方式更改视图的可见性属性

Android fragments 以编程方式更改视图的可见性属性,android-fragments,visibility,Android Fragments,Visibility,我已经问了一个较长的问题,其中包括这一点。试图把大问题分成小问题 我试图通过编程方式更改android:visibility=“gone”,如下所示: XML: 这是MainAction.java的布局,有3个用于存放片段的容器。片段_C不应该出现,并且在用户使用.replace(R.id.fragment_C,new FragmentC())点击按钮时填充 用于添加FragmentC并更改可见性属性的按钮的代码: 公共类FragmentB扩展了Fragment{ @凌驾 CreateVie

我已经问了一个较长的问题,其中包括这一点。试图把大问题分成小问题

我试图通过编程方式更改android:visibility=“gone”,如下所示:

XML: 这是MainAction.java的布局,有3个用于存放片段的容器。片段_C不应该出现,并且在用户使用.replace(R.id.fragment_C,new FragmentC())点击按钮时填充


用于添加FragmentC并更改可见性属性的按钮的代码:

公共类FragmentB扩展了Fragment{
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragmentB,容器,假);
ListView=(ListView)view.findViewById(R.id.listView1);
Button Button=(Button)view.findViewById(R.id.Button);
字符串[]机器=新字符串[]{“MachineId-001”、“MachineId-002”、“MachineId-003”、“MachineId-004”、“MachineId-005”、“MachineId-006”、“MachineId-007”、“MachineId-008”};
listView.setChoiceMode(listView.CHOICE\u MODE\u MULTIPLE);
setAdapter(新的ArrayAdapter(getActivity(),android.R.layout.select_dialog_multichoice,machines));
final FrameLayout=(FrameLayout)view.findviewbyd(R.id.fragment_C);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Activity=getActivity();
if(活动!=null){
getFragmentManager();
//使用setVisibility时,应用程序会崩溃,并出现错误
//java.lang.NullPointerException
frameLayout.setVisibility(View.VISIBLE);
}
}
});
返回视图;
}
}
谁能告诉我为什么我会得到一个NullPointerException,我在代码中到底做错了什么



其他数据:


调试应用程序后,我发现我的frameLayout变量是null。为什么这是空的我不知道。

发现了问题!。。和一个解决方案

错误是,在搜索要设置可见性属性的视图时,我使用了:

final FrameLayout frameLayout = (FrameLayout) view.findViewById(R.id.fragment_C);
如果查看代码,视图是:

View view = inflater.inflate(R.layout.fragmentB, container, false);
当然,片段C不在我的片段B布局中。因此,frameLayout将为null。这导致单击按钮时出现nullPointerException

解决方案是,在搜索要查看的视图时使用getActivity()而不是view。setVisibility()




希望这能帮助一个迷失的灵魂。。。就像我一样。

这个论坛上的一个用户建议添加一个额外的标志。但这也不起作用。
final FrameLayout frameLayout = (FrameLayout) view.findViewById(R.id.fragment_C);
View view = inflater.inflate(R.layout.fragmentB, container, false);
final FrameLayout frameLayout = (FrameLayout) getActivity().findViewById(R.id.fragment_C);