主要活动有2个片段(片段A和片段B)。fragmenta有一个文本视图,fragmentb有另一个活动(活动)。gymactivity有一个按钮,当单击时,它应该将textview隐藏在fragmenta中!
我试着用下面的方法做这个,但是没有用!它只在textview处于fragmentb中时工作。
主活动.java
public class MainActivity extends AppCompatActivity {
private static MainActivity instance;
@override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity.main);
instance = this;
}
public static MainActivity getInstance(){
return instance;
}
public void myMethod(){
// my method...
}
}
其他类.java
public Class AnotherClass() {
MainActivity.getInstance().myMethod();
}
这是我的密码!
碎片a
public class AFragment extends Fragment {
TextView txtview;
private static AFragment instance;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_A, container, false);
txtview = view.findViewById(R.id.A_txt);
instance = this;
return view;
}
public static AFragment getInstance() {
return instance;
}
public void myMethod() {
txtview.setVisibility(View.GONE);
}
}
碎片b
public class BFragment extends Fragment {
public CardView CvGym;
@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup
container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_B, container, false);
CvGym = (CardView) view.findViewById(R.id.gym);
CvGym.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getActivity(), GymActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}
});
return view;
}
}
现在在健身活动中
public class Gym extends AppCompatActivity {
Button buttonX;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_Gym);
buttonX = (Button)findViewById(R.id.btn_X);
getbtnX();
}
public Button getbtnX() {
buttonX.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentA.getInstance().myMethod();
}
});
return buttonX;
}
}
结论:
如果textview在fragmentb中,则此代码正常工作!但我必须隐藏文本视图,它是在碎片。那该怎么办呢?
1条答案
按热度按时间vyu0f0g11#
所以,首先。不要在静态变量中保存活动或片段。如果内存泄漏,可能会发生这种情况。
那么,你的
GymActivity
以及MainActivity
在ui中从不同时显示。那么,隐藏某些目前已不可见的视图的目的是什么呢?不管怎样,为了让它工作,你可以使用
SharedPreferences
,在数据库或最简单的解决方案中存储一些状态-使用pojo singleton对象。然后你就可以用在
GymActivity
. 代替具有
一旦你的
FragmentA
再次可见,您可以办理入住手续onResume
(片段生命周期)