Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果我有一个包含3种可能布局的片段,如何在运行时交换布局?_Java_Android_Android Layout_Android Fragments - Fatal编程技术网

Java 如果我有一个包含3种可能布局的片段,如何在运行时交换布局?

Java 如果我有一个包含3种可能布局的片段,如何在运行时交换布局?,java,android,android-layout,android-fragments,Java,Android,Android Layout,Android Fragments,我将有一个包含3个布局文件的片段。 所有3个布局文件都有一个文本视图和2个按钮 第一个布局文件只有textview和2个按钮 第二个布局文件只有textview和3个按钮 第三个布局文件只有textview和4个按钮 创建片段时,我将知道需要哪个布局文件,并可以使用switch语句在它们之间进行选择 我的困惑来自于如何定义和构造objects/ui元素 因为我可以在oncreateView中返回每个布局文件的视图,所以没有问题 但是我如何只构造必要数量的按钮呢 因为根据具体情况,我只有两个按钮可

我将有一个包含3个布局文件的片段。 所有3个布局文件都有一个文本视图和2个按钮

第一个布局文件只有textview和2个按钮

第二个布局文件只有textview和3个按钮

第三个布局文件只有textview和4个按钮

创建片段时,我将知道需要哪个布局文件,并可以使用switch语句在它们之间进行选择

我的困惑来自于如何定义和构造objects/ui元素

因为我可以在oncreateView中返回每个布局文件的视图,所以没有问题

但是我如何只构造必要数量的按钮呢


因为根据具体情况,我只有两个按钮可见,但一个类控制所有4个按钮。

你不需要3种不同的布局。 只需根据需要更改额外按钮的可见性

使用textview和2个按钮放大默认布局,然后添加逻辑

thirdButton.visibility = if(shouldDisplayThirdButton) View.Visible else View.Gone
fourthButton.visibility = if(shouldDisplayFourthButton) View.Visible else View.Gone

你不需要3种不同的布局。 只需根据需要更改额外按钮的可见性

使用textview和2个按钮放大默认布局,然后添加逻辑

thirdButton.visibility = if(shouldDisplayThirdButton) View.Visible else View.Gone
fourthButton.visibility = if(shouldDisplayFourthButton) View.Visible else View.Gone

您可以有一个布局,只需根据某些条件切换按钮可见性:

myButton.visibility = View.Visible(or View.Gone)
或者,您可以创建如下片段布局:

FrameLayout
   LayoutWith2Buttons
   LayoutWith3Buttons
   LayoutWith4Buttons
以及这些布局的可视性

myLayoutWith2Buttons.visibility = View.Visible (or View.Gone)

您可以有一个布局,只需根据某些条件切换按钮可见性:

myButton.visibility = View.Visible(or View.Gone)
或者,您可以创建如下片段布局:

FrameLayout
   LayoutWith2Buttons
   LayoutWith3Buttons
   LayoutWith4Buttons
以及这些布局的可视性

myLayoutWith2Buttons.visibility = View.Visible (or View.Gone)

我不知道您想要得到什么,但您也可以使用带有PageAdapter的ViewPager

class CustomVPAdapter extends PagerAdapter {
private String[] pagesList;
private Context context;


public CustomVPAdapter(Context context, String[] pagesList) {
    this.pagesList= pagesList;
    this.context = context;
   
}

@Override
public int getCount() {
    return this.pagesList.length;
}

@Override
public boolean isViewFromObject(android.view.View view, Object object) {
    return (view == (ConstraintLayout) object);
}

@Override
public Object instantiateItem(ViewGroup container, final int position) {
    LayoutInflater layoutInflater = ((LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE));
    android.view.View view = layoutInflater.inflate(R.layout.custome_pager_adapter, container, false);
    final ImageView localImageView = (ImageView) view.findViewById(R.id.iv_page);

   
  
   container.addView(view);
    return view;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((ConstraintLayout) object);
}

}

我不知道您想要什么,但您也可以将ViewPager与PageAdapter一起使用

class CustomVPAdapter extends PagerAdapter {
private String[] pagesList;
private Context context;


public CustomVPAdapter(Context context, String[] pagesList) {
    this.pagesList= pagesList;
    this.context = context;
   
}

@Override
public int getCount() {
    return this.pagesList.length;
}

@Override
public boolean isViewFromObject(android.view.View view, Object object) {
    return (view == (ConstraintLayout) object);
}

@Override
public Object instantiateItem(ViewGroup container, final int position) {
    LayoutInflater layoutInflater = ((LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE));
    android.view.View view = layoutInflater.inflate(R.layout.custome_pager_adapter, container, false);
    final ImageView localImageView = (ImageView) view.findViewById(R.id.iv_page);

   
  
   container.addView(view);
    return view;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((ConstraintLayout) object);
}

}

布局根据按钮的不同而变化,但如果我有两个按钮,它们需要并排排列。如果我有三个,它们需要2个在上面,一个在它们和下面之间居中。如果我有四个按钮,它们是以立方体样式排列的。但是布局会根据按钮的不同而变化,如果我有两个按钮,它们需要并排排列。如果我有三个,它们需要2个在上面,一个在它们和下面之间居中。如果我有四个按钮,它们是以立方体样式排列的。