将多个布局添加到水平滑动视图

时间:2014-12-08 10:32:10

标签: android android-fragments horizontalscrollview

我添加了一个水平滚动视图,在布局中我添加了两个片段的引用,这样两个片段在滚动中都可见。

问题是当我在左侧布局中输入值时,我想要在正确的布局中显示值。

我正在使用相同的界面,但它不起作用。就像我一直得到空指针异常一样..如何解决这个问题?

这是主要的类片段

 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;

1 个答案:

答案 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
}

这样的事应该可以正常工作。