[英]Pass methods between Fragments
I'm trying to call the methods made in fragment A to Fragment B, the method is called when I call in the recyclerview card, what happens next is that the fragment "B refreshs it goes away and nothing happens, please let me know if someething is wrong or it's a wrong way to do it ! thank you! 我正在尝试将片段A中的方法调用为片段B,当我在recyclerview卡中调用该方法时,该方法将被调用,接下来发生的事情是片段“ B刷新它消失了,什么也没有发生,请让我知道有些东西是错误的,或者是错误的方法!谢谢!
public class EuropeFragment extends Fragment {
private static EuropeFragment instance;
instance = this;
recyclerView = rootView.findViewById(R.id.recyclerViewCities);
createRecyclerView();
adapter.setOnitemClickListener(new RecyclerViewCitiesAdapter.onItemClickListener() {
@Override
public void onItemClick(int position) {
aboutCity(position);
}
@Override
public void onHearthClick(int position) {
saveFavourite(position);
}
});
return rootView;
}
public static EuropeFragment getInstance() {
return instance;
}
public void aboutCity(int position){
Cities cities = citiesArrayList.get(position);
String aboutCity = cities.getAboutCity();
int photo = cities.getImageCity();
Intent intent = new Intent(getContext(), AboutCityActivity.class);
intent.putExtra("about", aboutCity);
intent.putExtra("photo", photo);
startActivity(intent);
}
public void saveFavourite(int position){
Cities cities = citiesArrayList.get(position);
String nameCity = cities.getNameCity();
String nameCountry = cities.getNameCountry();
Toast.makeText(getActivity(), cities.getNameCountry(), Toast.LENGTH_LONG).show();
HashMap<String, String> wish = new HashMap<>();
wish.put("Country", nameCountry);
wish.put("City", nameCity);
}
public void createRecyclerView(){
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getContext());
recyclerView.addItemDecoration(new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL));
adapter = new RecyclerViewCitiesAdapter(getActivity(), citiesArrayList);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
}
public class AsiaFragment extends Fragment {
private ArrayList<Cities> citiesArrayList;
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
private RecyclerViewCitiesAdapter adapter;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_europe,container,false);
createArray();
recyclerView = rootView.findViewById(R.id.recyclerViewCities);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getContext());
recyclerView.addItemDecoration(new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL));
adapter = new RecyclerViewCitiesAdapter(getActivity(), citiesArrayList);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
adapter.setOnitemClickListener(new RecyclerViewCitiesAdapter.onItemClickListener() {
@Override
public void onItemClick(int position) {
EuropeFragment.getInstance().aboutCity(position);
}
@Override
public void onHearthClick(int position) {
EuropeFragment.getInstance().saveFavourite(position);
}
});
return rootView;
}
You can just create a class on your "utils"/"logic"/"business" package and create both these functions as static. 您只需在“ utils” /“ logic” /“ business”包上创建一个类,然后将这两个函数创建为静态。 This way, you will only have logic in one place.
这样,您将只将逻辑放在一个地方。
You can create listener interface in your fragment. 您可以在片段中创建侦听器接口。
public class EuropeFragment extends Fragment {
private EuropeFragmentListener mEuropeFragmentListener;
public EuropeFragment(EuropeFragmentListener mEuropeFragmentListener) {
this.mEuropeFragmentListener = mEuropeFragmentListener;
}
adapter.setOnitemClickListener(new RecyclerViewCitiesAdapter.onItemClickListener() {
@Override
public void onItemClick(int position) {
mEuropeFragmentListener.onAdapterItemClicked(position);
}
@Override
public void onHearthClick(int position) {
saveFavourite(position);
}
});
public interface EuropeFragmentListener {
void onAdapterItemClicked(int position);
}
} }
Then implement the interface in your activity. 然后在您的活动中实现该接口。
class MainActivity implements EuropeFragment.EuropeFragmentListener {
@Override
public void onAdapterItemClicked(int position) {
aboutCity(position)
}
} }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.