Android以编程方式创建视图不会获得分离的实例

时间:2017-04-06 02:33:02

标签: android android-studio

我收到了以下代码

for (int i = 0; i < cantcuenta ; i++) {
        textview = new ArrayList<>();
        final Integer nro = i + 1;
        Hmayor = new LinearLayout(view.getContext());
        LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
        param.weight = pesoLayout;
        Hmayor.setOrientation(LinearLayout.VERTICAL);
        Hmayor.setWeightSum(1);
        Hmayor.setLayoutParams(param);

        scrollview = new ScrollView(view.getContext());
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0);
        params.weight = 0.65f;
        scrollview.setLayoutParams(params);

        linearinterno = new LinearLayout(view.getContext());
        linearinterno.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        linearinterno.setOrientation(LinearLayout.VERTICAL);
        scrollview.addView(linearinterno);


        for (int j = 0; j < 10; j++)
        {
            test = new TextView(view.getContext());
            test.setId(j);
            test.setText("Lorem Ipsum" + j);
            test.setVisibility(View.GONE);
            textview.add(test);
        }

        boleta = new Button(view.getContext());
        RelativeLayout.LayoutParams parambo = new RelativeLayout.LayoutParams(100, 50);
        boleta.setLayoutParams(parambo);
        boleta.setText("BOLETA");
        boleta.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10);
        boleta.setTypeface(Typeface.DEFAULT_BOLD);
        boleta.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
        boleta.setTextColor(getResources().getColor(white, null));
        boleta.setBackgroundColor(getResources().getColor(colorAccent, null));
        boleta.setId(nro);
        boleta.setPadding(0,0,0,0);
        boleta.setVisibility(View.GONE);
        boleta.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

        factura = new Button(view.getContext());
        RelativeLayout.LayoutParams paramfa = new RelativeLayout.LayoutParams(100, 50);
        paramfa.addRule(RelativeLayout.RIGHT_OF, boleta.getId());
        factura.setLayoutParams(paramfa);
        factura.setText("FACTURA");
        factura.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10);
        factura.setTypeface(Typeface.DEFAULT_BOLD);
        factura.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
        factura.setTextColor(getResources().getColor(white, null));
        factura.setBackgroundColor(getResources().getColor(colorAccent, null));
        factura.setPadding(0,0,0,0);
        factura.setVisibility(View.GONE);
        factura.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });



        ncuenta = new Button(view.getContext());
        LinearLayout.LayoutParams paramb = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0);
        paramb.weight = 0.15f;
        ncuenta.setLayoutParams(paramb);
        ncuenta.setPadding(0,0,0,0);
        ncuenta.setText("CUENTA " + nro);
        ncuenta.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10);
        ncuenta.setTypeface(Typeface.DEFAULT_BOLD);
        ncuenta.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START);
        ncuenta.setTextColor(getResources().getColor(letras, null));
        ncuenta.setBackgroundColor(getResources().getColor(transparent, null));
        ncuenta.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                Boolean sw = false;

                for (TextView este : textview)
                {
                    if (este.getVisibility() == View.GONE)
                    {
                        este.setVisibility(View.VISIBLE);
                        linearinterno.addView(este);
                        factura.setVisibility(View.VISIBLE);
                        boleta.setVisibility(View.VISIBLE);
                        sw = true;
                    }

                }

                if (!sw)
                {
                    for (TextView este : textview)
                    {
                        este.setVisibility(View.GONE);
                        factura.setVisibility(View.GONE);
                        boleta.setVisibility(View.GONE);
                    }
                    linearinterno.removeAllViews();
                }


            }
        });
        Hmayor.addView(ncuenta);
        Hmayor.addView(scrollview);





        linearinternodw = new LinearLayout(view.getContext());
        LinearLayout.LayoutParams paramdw = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,0);
        paramdw.weight = 0.2f;
        linearinternodw.setLayoutParams(paramdw);

        Hmayor.addView(linearinternodw);


        relainterno = new RelativeLayout(view.getContext());
        RelativeLayout.LayoutParams paramr = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
        relainterno.setLayoutParams(paramr);

        relainterno.addView(factura);
        relainterno.addView(boleta);

        linearinternodw.addView(relainterno);








        theParent.addView(Hmayor);
    }

它会创建此分发

enter image description here

当我在代码中按下名为“ncuenta”的“CUENTA 1”按钮时,它应该使自己布局中的所有文本都与图片中显示的“BOLETA”和“FACTURA”按钮一起消失相反,它让它去了“CUENTA 2”视图,我已经为recyclerviews做了这种编码,并且所有内容都是分开实例化的,会认为每次它都会创建一个新的实例,它会附加到任何视图FOR的相应周期。

如果我将屏幕划分为4,前三个按钮将显示并隐藏“CUENTA 4”,它告诉我setOnclickListener它只接受最后一组实例的实例..

关于如何解决这个问题的任何想法?

提前致谢

1 个答案:

答案 0 :(得分:0)

您的onClickListener执行此代码

for (TextView este : textview)
                {
                    if (este.getVisibility() == View.GONE)
                    {
                        este.setVisibility(View.VISIBLE);
                        linearinterno.addView(este);
                        factura.setVisibility(View.VISIBLE);
                        boleta.setVisibility(View.VISIBLE);
                        sw = true;
                    }

                }

执行时,textview ArrayList的内容将是您在上一次迭代中添加的元素,这就是为什么只定位上一部分中的视图的原因。 希望它有所帮助。