Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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/178.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 &引用;“重画”;要更改选项的LinearLayout视图_Java_Android_Android Layout_Android Linearlayout_Builder - Fatal编程技术网

Java &引用;“重画”;要更改选项的LinearLayout视图

Java &引用;“重画”;要更改选项的LinearLayout视图,java,android,android-layout,android-linearlayout,builder,Java,Android,Android Layout,Android Linearlayout,Builder,我试图将属性更改为customLinearLayoutclass,我将选项设置为class with: MyBuilder option = new MyBuilder.Builder() .image(...) .setCardRadius(...) .build()); 然后我调用main活动 MyObject obj = (MyObject) findViewById(R.id.myObject); obj.init(context, option); 但是,如果我使用不同的选项多次

我试图将属性更改为custom
LinearLayout
class,我将选项设置为class with:

MyBuilder option = new MyBuilder.Builder()
.image(...)
.setCardRadius(...)
.build());
然后我调用
main活动

MyObject obj = (MyObject) findViewById(R.id.myObject); 
obj.init(context, option);
但是,如果我使用不同的
选项多次调用
obj.init(…)
,则生成器设置了旧值,因此视图无法正确更改属性

所以我的问题是:我可以在初始化新对象之前重置
Builder
o
LinearLayout

这是我的线性布局。java

public class MyObject extends LinearLayout{
    CardView card;
    ImageView image;
    float cardRadiusAttr;
    View rootView;
    AttributeSet attributeSet;

    public void init(final Context context, final MyBuilder option){
        if(option != null)
        {
         /*
        Get attribute from XML
         */
            TypedArray ta = context.obtainStyledAttributes(attributeSet, R.styleable.Card, 0, 0);
            try {
                cardRadiusAttr = ta.getDimension(R.styleable.Card_c_cardRadius, option.getCardRadius());

            } finally {
                ta.recycle();
            }

        /*
        Set up xml object.
         */
            card = (CardView) findViewById(R.id.card);
            image = (ImageView) findViewById(R.id.image);

            card.setRadius(cardRadiusAttr);

            /**
             * Check if Option is set
             */
            if (option.isImage() != null) {

              //Set Image

            }
        }else{
            Log.e("Initialization", "Option View not initialize!");
        }
    }


    public MyObject(Context context, AttributeSet attrs) {
        super(context, attrs);
        /*
        Inflater custom layout to view.
         */
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        rootView = inflater.inflate(R.layout.Card, this, true);
        attributeSet = attrs;
    }


    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
    }

}
这是MyBuilder.java

public class MyBuilder {
    private int mImage;
    private float mCardRadius = 4f;

    private MyBuilder(Builder builder)
    {
        mImage = builder.mImage;
        mCardRadius = builder.mCardRadius;
    }

    public static class Builder{
        private int mImage;
        private float mCardRadius = 4f;

        public Builder setCardRadius(float radius)
        {
            if(radius <= 0)
            {
                Log.e("CardRadius", "Impossible to set Card Radius lower than 0! Please Check it");
            }
            else {
                mCardRadius = radius;
            }
            return this;
        }

        public Builder image(int image) {

            if(image == 0)
            {
                Log.e("Image", "Impossible to set Image to 0! Please Check it");
            }
            else {
                mImage = image;
            }
            return this;
        }

        public MyBuilder build() {
            return new MyBuilder(this);
        }

    }

    public int getImage() {
        return mImage;
    }

    public float getCardRadius() {
        return mCardRadius;
    }
}
公共类MyBuilder{
私人图像;
专用浮点数mCardRadius=4f;
私人MyBuilder(生成器生成器)
{
mImage=builder.mImage;
mCardRadius=builder.mCardRadius;
}
公共静态类生成器{
私人图像;
专用浮点数mCardRadius=4f;
公共生成器setCardRadius(浮动半径)
{

如果(半径我最终发现了问题

MyObject
init
方法中,您必须在上次使用后清理视图


在这种特殊情况下,首先,您传递一组选项。在此基础上,View正在调整其控件的
可见性
(使
按钮1
按钮2
,等等
可见
)。但当您传递另一组选项时,您必须删除之前所做的所有更改。(即隐藏
按钮1
按钮2
等,并让视图再次调整其控件的
可见性

你确定构建器使用了旧值吗?或者视图没有根据新参数重新绘制?我确定构建器有旧参数@CristianHoldunu请显示整个自定义线性布局,它是简化的@ligiI不明白:MyBuilder
是什么?MyObject
是什么?如何“调用多次obj.init”?到目前为止,我最好的猜测是
MyBuilder
中的问题。您的选项对象保持不变。您节省了我的时间,先生!