我添加了一个水平滚动视图,在布局中我添加了两个片段的引用,这样两个片段在滚动中都可见。
问题是当我在左侧布局中输入值时,我想要在正确的布局中显示值。
我正在使用相同的界面,但它不起作用。就像我一直得到空指针异常一样..如何解决这个问题?
这是主要的类片段
public static SliderRightAdapter sliderRightAdapterFragment; <-- this calls the second layout
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.f_pp, container, false);
sliderRightAdapterFragment = (SliderRightAdapter) getActivity()
.getSupportFragmentManager().findFragmentById(
R.id.secondary_sliderProduct_description);
return view;
}
。 。 。 。 这是我在sliderRightAdapterfragment上获得空指针异常的地方
interfaceObject.onButtonClick(CGS, sliderRightAdapterFragment);
这是初始化的地方......
sliderRightAdapterFragment = PDFinterface.sliderRightAdapterFragment;
答案 0 :(得分:0)
从我看到的情况来看,你让片段直接相互通信。 我建议反对它,因为这可以很快导致维护未使用的引用,因为片段可以具有相当多的生命周期。片段背后的想法是拥有一小部分功能,可以与父母沟通一些信息。
我认为更好的方法是将父活动用作“经理”的形式。这两个片段之间。
不是维护对其他片段的静态引用,而是存储对活动的常规引用,最好以活动实现的侦听器接口的形式存储。然后,您将使用findFragmentById / Tag通知更改的其他片段。总而言之,这看起来像这样:
片段:
public interface ActivityListener {
void onText(String text);
}
private ActivityListener listener;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if(activity instanceof ActivityListener) {
listener = (ActivityListener) activity;
}
// else some error
}
@Override
public void onDetach(Activity activity) {
// to make absolutely sure you don't maintain a reference to a killed activity
listener = null;
}
的活动:
@Override
public void onText(String text) {
Fragment frag = getSupportFragmentManager.findFragmentById(<someId>);
// notify with text information
}
这样的事应该可以正常工作。