如何以编程方式引用视图?

时间:2012-12-22 13:49:00

标签: android android-layout

我创建了一个布局。全部以编程方式完成。现在我有一个按钮,用于在单击时更改视图的可见性。坦白说,我不知道如何引用这个观点。

以下是代码的一部分:

    //my button to show pop-up
    Button btn_showPop = new Button(this);
    btn_showPop.setText("Pop-up");
    btn_showPop.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT));
    btn_showPop.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            hsv.post(new Runnable() {

                @Override
                public void run() {
                    if (Menu_Displayed) {
                        //pop-up
                        li_pop.setVisibility(View.VISIBLE); //how do I reference li_pop
                    } else {
                        //do nothing
                    }
                }
            });
        }
    });

    // pop-up:
    final LinearLayout li_pop = new LinearLayout(this);
    li_pop.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.FILL_PARENT));
    li_pop.setOrientation(1);// 1 is vertical
    li_pop.setBackgroundColor(Color.LTGRAY);
    li_pop.setVisibility(View.GONE);
    li_pop.setClickable(true);

2 个答案:

答案 0 :(得分:1)

更改代码以获取对动态创建的View

的引用

班级第一decalre li_pop

 LinearLayout li_pop;

创建时li_pop的第二个设置ID为:

li_pop = new LinearLayout(this);
li_pop.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
        LayoutParams.FILL_PARENT));

 li_pop.setId(599980); // set LinearLayout id here

现在您可以在按钮点击时引用li_pop LinearLayout:

@Override
        public void onClick(View v) {
            hsv.post(new Runnable() {

                @Override
                public void run() {
                    if (Menu_Displayed) {
                        //pop-up
                        li_pop.setVisibility(View.VISIBLE); 
                      //OR
                 LinearLayout li_popnew=(LinearLayout)findViewById(599980);
                    li_popnew.setVisibility(View.VISIBLE);


                    } else {
                        //do nothing
                    }
                }
            });

答案 1 :(得分:0)

移动线

final LinearLayout li_pop = new LinearLayout(this);

在参考之前。