【问题标题】:adding multiple layouts to horizontal swipe view向水平滑动视图添加多个布局
【发布时间】:2014-12-08 10:32:10
【问题描述】:

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

问题是当我在左侧布局中输入值时,我希望该值显示在右侧布局中。

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

这是主要的类片段

 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;

【问题讨论】:

    标签: android android-fragments horizontalscrollview


    【解决方案1】:

    据我所见,您正在让片段直接相互通信。 我建议不要这样做,因为这会很快导致维护未使用的引用,因为片段可以有非常不同的生命周期。 Fragment 背后的想法是拥有一小部分功能,可以与它们的父级通信一些信息。

    我认为更好的方法是使用父活动作为这两个片段之间的“管理器”形式。

    不要维护对另一个片段的静态引用,而是存储对活动的正常引用,最好以活动实现的侦听器接口的形式。然后,您将使用 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
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多