Android 以编程方式设置ViewPager和#x27;s项目';s小部件和包含ViewPager的布局小部件是不可能的

Android 以编程方式设置ViewPager和#x27;s项目';s小部件和包含ViewPager的布局小部件是不可能的,android,android-layout,android-viewpager,android-widget,android-constraintlayout,Android,Android Layout,Android Viewpager,Android Widget,Android Constraintlayout,我有一个ConstraintLayout包含一个ViewPager和另一个小部件,我们可以称之为“a”。我想在一个ViewPager的小部件(我们可以称为“B”)和“a”之间添加一个约束。当然,B实际上是一个包含在片段中的小部件(因为ViewPagers使用片段)。请注意,此片段的布局也是一个ConstraintLayout 事实上,如果我正确理解了我所阅读和尝试的内容,我就无法使用XML来实现这一点 因此,我尝试使用以下代码以编程方式实现: ConstraintSet constraintSe

我有一个
ConstraintLayout
包含一个
ViewPager
和另一个小部件,我们可以称之为“a”。我想在一个
ViewPager
的小部件(我们可以称为“B”)和“a”之间添加一个约束。当然,B实际上是一个包含在片段中的小部件(因为
ViewPagers
使用片段)。请注意,此片段的布局也是一个
ConstraintLayout

事实上,如果我正确理解了我所阅读和尝试的内容,我就无法使用XML来实现这一点

因此,我尝试使用以下代码以编程方式实现:

ConstraintSet constraintSet = new ConstraintSet();
ConstraintLayout constraintLayout = inflated.findViewById(R.id.fragment_home_constraint_layout);
constraintSet.connect(R.id.B, ConstraintSet.TOP, R.id.A, ConstraintSet.BOTTOM,0);
constraintSet.applyTo(constraintLayout);
  • R.id.fragment\u home\u constraint\u layout
    是包含
    ViewPager
    和A的约束布局

  • 因此,我试图告诉“请将B约束为A,B是
    ViewPager
    的项(nota:item=fragment)小部件,A是布局的小部件,它也包含
    ViewPager

问题是:它不起作用。没有错误,没有崩溃。但它根本不起作用。这就像约束没有激活,没有设置


为什么以及如何做到这一点?

约束具有不同父视图的两个视图是不可能的

所以我试着告诉“请约束B,这是ViewPager的 item(nota:item=fragment)小部件,到A,它是 布局,其中还包含“ViewPager”

上述要求并不容易。您仍然可以在片段中使用一些回调。因此,每当片段中的小部件找到它的位置时,活动视图也应该相应地移动

下面的例子应该是一个很好的开始

通过单击Viewpager片段中的按钮,活动布局中的小部件将更改其位置

 @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        button = view.findViewById(R.id.buttonmove);
        viewPager = getActivity().findViewById(R.id.vpPager);
        activityButton = getActivity().findViewById(R.id.activity_button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ConstraintLayout constraintLayout = (ConstraintLayout) getActivity().findViewById(R.id.fragment_home_constraint_layout);
                ConstraintSet set = new ConstraintSet();
                set.constrainWidth(R.id.activity_button, ConstraintSet.WRAP_CONTENT);
                set.constrainHeight(R.id.activity_button, ConstraintSet.WRAP_CONTENT);
                set.centerHorizontally(R.id.activity_button, R.id.fragment_home_constraint_layout);
                set.connect(R.id.activity_button, ConstraintSet.TOP, R.id.vpPager, ConstraintSet.BOTTOM, 200);
                set.applyTo(constraintLayout);
            }
        });
    }