Android - 如何从片段中的其他方法访问在 onCreateView() 中实例化的 RelativeLayout
Android - How can I access a RelativeLayout instantiated in onCreateView() from an other method in a Fragment
我希望当用户点击后退按钮时相关布局消失
在我的 onCreateView() 方法中,我正在实例化一个 RelativeLatout 视图:
VerbFragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_verbs,container, false);
relativeLayout = (RelativeLayout)rootView.findViewById(R.id.rlListVerb);
relativeLayout.setVisibility(View.GONE);
我想从其他方法 (backButtonWasPressed()) 访问亲戚
public void backButtonWasPressed() {
Log.d("hi ", "back is pressed");
if (!visible) {
relativeLayout.setVisibility(View.GONE);
} else relativeLayout.setVisibility(View.VISIBLE);
}
按下后退按钮时在 MainActivity2 中调用此方法:
MainActivity2
@Override
public void onBackPressed() {
VerbFragment fragment = new VerbFragment();
fragment.backButtonWasPressed();
}
但我收到此错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.setVisibility(int)' on a null object reference
at Fragments.VerbFragment.backButtonWasPressed(VerbFragment.java:258)
at Activitys.MainActivity2.onBackPressed(MainActivity2.java:136)
在你的 relativeLayout 上使用:
relativeLayout.setId(IntValueHere);
您可以制作一个全局相对布局变量:
private RelativeLayout myLayout;
现在,在设置 id 后将创建的 RelativeLayout 分配给 myLayout:
myLayout = relativeLayout;
最后,在您的 backButtonWasPressed(){} 中,您可以访问 myLayout 引用,它应该没问题。
或者,您可以给 backButtonWasPressed 一个 relativeLayout 参数,并将您的 "relativeLayout" 传递给它。
给你的 backButtonWasPressed 一个 RelativeLayout 的参数
public void backButtonWasPressed(RelativeLayout layoutToTake){
if(!visible){
layoutToTake.setVisibility(View.GONE);
}
}
似乎是因为 backButtonWasPressed()
从 MainActivity2
而不是 VerbFragment
调用。在这种情况下 relativeLayout
变量可以是 null
。您可以通过检查 VerbFragment
的可见性来避免这种情况,例如:
public void backButtonWasPressed() {
Log.d("hi ", "back is pressed");
if (getView() == null || !isMenuVisible()) {
return;
}
if (!visible) {
relativeLayout.setVisibility(View.GONE);
} else relativeLayout.setVisibility(View.GONE);
}
将片段添加到 Activity 时,它有一个 标签 参数。
fragmentTransaction.add(R.id.container, fragment, tag);
现在,在您的 Activity 的 backButtonWasPressed() 方法中,您可以使用标签找到该片段,如果它不为空,则调用 backButtonWasPressed()片段.
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment verbFragment = fragmentManager.findFragmentByTag(fragmentTag);
if(verbFragment !=null && verbFragment .isVisible()){
verbFragment .backButtonWasPressed();
}
我希望当用户点击后退按钮时相关布局消失
在我的 onCreateView() 方法中,我正在实例化一个 RelativeLatout 视图:
VerbFragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_verbs,container, false);
relativeLayout = (RelativeLayout)rootView.findViewById(R.id.rlListVerb);
relativeLayout.setVisibility(View.GONE);
我想从其他方法 (backButtonWasPressed()) 访问亲戚
public void backButtonWasPressed() {
Log.d("hi ", "back is pressed");
if (!visible) {
relativeLayout.setVisibility(View.GONE);
} else relativeLayout.setVisibility(View.VISIBLE);
}
按下后退按钮时在 MainActivity2 中调用此方法:
MainActivity2
@Override
public void onBackPressed() {
VerbFragment fragment = new VerbFragment();
fragment.backButtonWasPressed();
}
但我收到此错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.setVisibility(int)' on a null object reference
at Fragments.VerbFragment.backButtonWasPressed(VerbFragment.java:258)
at Activitys.MainActivity2.onBackPressed(MainActivity2.java:136)
在你的 relativeLayout 上使用:
relativeLayout.setId(IntValueHere);
您可以制作一个全局相对布局变量:
private RelativeLayout myLayout;
现在,在设置 id 后将创建的 RelativeLayout 分配给 myLayout:
myLayout = relativeLayout;
最后,在您的 backButtonWasPressed(){} 中,您可以访问 myLayout 引用,它应该没问题。
或者,您可以给 backButtonWasPressed 一个 relativeLayout 参数,并将您的 "relativeLayout" 传递给它。
给你的 backButtonWasPressed 一个 RelativeLayout 的参数
public void backButtonWasPressed(RelativeLayout layoutToTake){
if(!visible){
layoutToTake.setVisibility(View.GONE);
}
}
似乎是因为 backButtonWasPressed()
从 MainActivity2
而不是 VerbFragment
调用。在这种情况下 relativeLayout
变量可以是 null
。您可以通过检查 VerbFragment
的可见性来避免这种情况,例如:
public void backButtonWasPressed() {
Log.d("hi ", "back is pressed");
if (getView() == null || !isMenuVisible()) {
return;
}
if (!visible) {
relativeLayout.setVisibility(View.GONE);
} else relativeLayout.setVisibility(View.GONE);
}
将片段添加到 Activity 时,它有一个 标签 参数。
fragmentTransaction.add(R.id.container, fragment, tag);
现在,在您的 Activity 的 backButtonWasPressed() 方法中,您可以使用标签找到该片段,如果它不为空,则调用 backButtonWasPressed()片段.
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment verbFragment = fragmentManager.findFragmentByTag(fragmentTag);
if(verbFragment !=null && verbFragment .isVisible()){
verbFragment .backButtonWasPressed();
}