Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.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 更新视图';添加子项后的s维度_Java_Android_View_Android Relativelayout_Android Constraintlayout - Fatal编程技术网

Java 更新视图';添加子项后的s维度

Java 更新视图';添加子项后的s维度,java,android,view,android-relativelayout,android-constraintlayout,Java,Android,View,Android Relativelayout,Android Constraintlayout,我有一个RelativeLayout和一个ConstraintLayout(还有一些其他的东西),我通过编程的方式用孩子们填充它。初始化所有子视图后,我很难调整父视图的大小 基本上,我想要实现的是: 以下是代码片段: @BindView(R.id.session_summary_items_include_correct) View mCardCorrect; //... @Override public View onCreateView(LayoutInflater inflater

我有一个
RelativeLayout
和一个
ConstraintLayout
(还有一些其他的东西),我通过编程的方式用孩子们填充它。初始化所有子视图后,我很难调整父视图的大小

基本上,我想要实现的是:

以下是代码片段:

@BindView(R.id.session_summary_items_include_correct) View mCardCorrect;

//...

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view =  inflater.inflate(R.layout.fragment_session_summary_items, container, false);
    ButterKnife.bind(this, view);
    correctCard = new IncludedCard();
    ButterKnife.bind(correctCard, mCardCorrect);

    initializeViews();

    mCardCorrect.post(() -> resizeView(mCardCorrect));

    return view;
}

private void initializeViews(){
    ArrayList<MyClass> items = MyClass.GetItems();
    LayoutInflater layoutInflater = (LayoutInflater) getActivity().getApplicationContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);     

    if (items.size() > 0){
        correctCard.mCardTitle.setText("Correct Card");
        ArrayList<View> views = getItemViews(items, layoutInflater);
        populateLayoutWithItemViews(correctCard.mConstraintLayout, views);
    }
}  

private ArrayList<View> getItemViews(ArrayList<MyClass> items, LayoutInflater inflater){
    ArrayList<View> results = new ArrayList<>();
    for (MyClass item : items){
        View view = inflater.inflate(R.layout.item_view, null);
        TextView mTextTitle = (TextView) view.findViewById(R.id.item_view_title);
        mTextTitle .setText(item.getTitle());
        results.add(view);
    }
    return results;
}

 private void populateLayoutWithItemViews(ConstraintLayout layout, ArrayList<View> items){

    ConstraintSet constraintSet = new ConstraintSet();
    constraintSet.clone(layout);

    for (int idx = 0; idx < items.size(); idx ++){
        View item = items.get(idx);
        item.setId(View.generateViewId());
        layout.addView(item);

        // constraintSet magic to make them connect as expected

    }

    constraintSet.applyTo(layout);
}

private void resizeView(View view){

    view.setLayoutParams(new RelativeLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT));
}

static class IncludedCard{
    @BindView(R.id.card_title) TextView mCardTitle;
    @BindView(R.id.card_layout) ConstraintLayout mConstraintLayout;
}
@BindView(R.id.session\u summary\u items\u include\u correct)查看mCardCorrect;
//...
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u session\u summary\u items,container,false);
ButterKnife.bind(这个,视图);
correctCard=新包含的卡();
ButterKnife.bind(correctCard,mCardCorrect);
初始化视图();
post(()->resizeView(mCardCorrect));
返回视图;
}
private void initializeViews(){
ArrayList items=MyClass.GetItems();
LayoutInflater LayoutInflater=(LayoutInflater)getActivity().getApplicationContext()
.getSystemService(上下文布局\充气机\服务);
如果(items.size()>0){
correctCard.mCardTitle.setText(“正确的卡片”);
ArrayList视图=GetItemView(items,LayoutFlater);
PopulateLayoutWithitemView(correctCard.mConstraintLayout,视图);
}
}  
私有ArrayList GetItemView(ArrayList项、布局、充气器){
ArrayList结果=新建ArrayList();
对于(MyClass项目:项目){
视图=充气机。充气(R.layout.item_视图,空);
TextView mTextTitle=(TextView)view.findViewById(R.id.item\u view\u title);
mTextTitle.setText(item.getTitle());
结果。添加(视图);
}
返回结果;
}
私有void populateLayoutWithitemView(ConstraintLayout布局、ArrayList项){
ConstraintSet ConstraintSet=新ConstraintSet();
constraintSet.clone(布局);
对于(int idx=0;idx
现在的问题是,无论何时何地,无论我如何测量/调整mCardCorrect视图,结果都是一样的:它将被测量到卡片标题,就好像ConstraintLayout中的子项不存在一样。像这样:


我尝试过将度量/大小调整为可运行的,如此处:,并使用OnGlobalLayoutListener,如此处:。我还是一个Android新手,这是我的第一个项目,所以任何帮助都将不胜感激。谢谢

您需要约束每个视图。发件人:

。。。如果在设备上运行布局时视图没有约束,则在位置[0,0](左上角)绘制视图

您添加的所有视图都不受约束,因此它们都在(0,0)处相互重叠


看起来您正确设置了
约束集
,只需使用
约束集
添加约束即可。网上有一些很好的教程演示了如何做到这一点。这是一个。您还可以参考。

您需要约束每个视图。发件人:

。。。如果在设备上运行布局时视图没有约束,则在位置[0,0](左上角)绘制视图

您添加的所有视图都不受约束,因此它们都在(0,0)处相互重叠

看起来您正确设置了
约束集
,只需使用
约束集
添加约束即可。网上有一些很好的教程演示了如何做到这一点。这是一个。您也可以参考