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

could Inflated layout access parent variables?

我是 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 = (Child) findViewById(R.id.my_iniflate_layout); 代码) 您可以访问实际的 Child class object。之后,您可以通过回调使用 parent 的 class 中的变量或方法。

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

这是一种非常简单的方法,但是对于新手来说很难找到,因为它太简单了。试图回答的人可能会想‘这家伙不可能不知道回调什么的,他一定想知道一些技巧或其他方法。’)

如果您从 class 定义了对象,则只能访问 P.java 的值,因为如果它是静态的并且 isClicked 应该是 public。

以下是它在 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