膨胀布局可以访问 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
我是 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