【发布时间】:2021-07-18 08:30:37
【问题描述】:
MainActivity 有 2 个 Fragment(FragmentA 和 FragmentB)。 FragmentA 有一个 TextView,而 FragmentB 有另一个 Activity(GymActivity)。 GymActivity 有一个 Button,单击时应该隐藏 FragmentA 中的 TextView!
我尝试通过以下方法执行此操作,但没有成功!仅当 TextView 在 FragmentB 中时才有效。
MainActivity.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;
}
}
现在在 GymActivity
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 中,则此代码可以正常工作!但我必须隐藏 FragmentA 中的 TextView。那么该怎么办呢?
【问题讨论】:
-
问题不清楚。什么有 FragmentB?片段包含一个活动??你想从哪里调用
myMethod,从 Fragment 还是 Activity? -
@anatoli,在 FragmentB 里面有一个 Cardview 可以打开 GymActivity,在 GymActivity 里面有一个 Button。!并且 myMethod 将从 GymAvtivity 调用!!
-
为了更清楚,我将添加我的代码!
-
嗯?还是不明白。是的,请提供代码以查看确切的问题。并且无法同时看到 2 个活动。不明白为什么标题叫“Activity-Fragment Method Communication”
-
@anatoli 现在怎么样了?我已经添加了代码!好吧,我不知道给这个问题取什么标题,所以我只是添加了一个随机的标题,不要介意!! p.s.感谢您的帮助!
标签: java android android-activity fragment communication