简体   繁体   English

在片段之间传递方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM