可以膨胀布局访问父变量吗?

时间:2015-01-08 02:00:29

标签: android layout-inflater

我是Java / Android的新手,所以也许我的问题不清楚或奇怪或缺少一些必要的信息。如果是,我会编辑我的问题。

我的问题是我是否可以从C.java代码访问isClicked变量。

这是我的代码结构。

(P.java)
~~~~
boolean isClicked;

(P.xml)
~~~
<my_custom_class
    android:id="@+id/my_inflate_layout"
    ~~~~~~~~~~ >
</my_custom_class>


(C.xml)
normal layout code

(C.java)
public class my_custom_class extends FrameLayout implements OnClickListener {
    ~~~~~
    LayoutInflater layoutInflater = LayoutInflater.from(getContext());
    final View view = layoutInflater.inflate(R.layout.layout_guide, this);
    ~~~~~~

谢谢。

修改

我为那些面临类似问题的人提出了我的解决方案。

Child.java。

public class Child {
    private TestListener listener; 
    public void setTestListener(TestListener l) {
        listener = l;
    }

    @Ovrride
    public void onClick(View v) {
       // when a button is clicked
       listener.clickButton(true/false);
    }


    public interface TestListener {
        public void clickButton(boolean confirm) {
        }
    }
}

Parent.java

public class Parant {
    private TestListener testListener = new TestListener() 
        @Override
        public void clickButton (boolean confirm) {
             // something want to do
        }
    };
}

Child child = (Child) findViewById(R.id.my_iniflate_layout);
child.setTestListener(testListener);

点是如果你得到'孩子'(使用Child child =(Child)findViewById(R.id.my_iniflate_layout); code) 您可以访问实际的Child类对象。之后,您可以通过回调使用父类的变量或方法。

我不知道。 :((我认为代码只是得到一些UI对象或东西。)

这是一种非常简单的方式,但很难找到新手,因为它很简单。那些试图回答的人可能会认为“这个家伙根本不知道回调或某事,他必须想知道一些技巧或其他方式。”)

1 个答案:

答案 0 :(得分:0)

只有当您从该类定义了对象时才能访问P.java中的值,如果它是静态的并且isClicked应该是公共的。

以下是它在java / android中的工作原理。

//define a class
public class P{

     //public values are the one you can access from other class members
     public boolean isClicked;

    //or static but public
    public static boolean anotherIsClicked;

}

您可以按如下方式从C.java访问:

public class C{


    public void someMethod(){


        //direct access because it is public static
        P.anotherIsClicked;

        //or by creating new class
        new C().isClicked;
    }

}

但是代码上存在基本的java东西错误。我建议你在跳过像android UI这样的东西之前要清楚地浏览java。