簡體   English   中英

如何使用androidx從另一個片段調用片段方法

[英]How to call fragment method from another fragment using androidx

我在我的應用程序中使用 androidx jetpack 導航組件,我對如何從當前片段調用前一個片段中的方法感到困惑。

目前沒有關於如何執行此操作的在線資源。

我的實現如下...

片段A

這是第一個片段的代碼示例。

public class FragmentOne extends Fragment{

    private String holder;

    private NavController navController;
    private Button btn_next;

    private void findViews(View view){
        btn_next = view.findViewById(R.id.btn_next);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_one, container, false);

    return view;

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        navController = Navigation.findNavController(view);
        findViews(view);

        holder = "VALUE IN HOLDER VARIABLE";

        btn_next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                navController.navigate(R.id.action_fundone_to_fragmenttwo);
            }
        });


    }

    public void executeInFragmentTwo(){
        System.out.println(holder);
        Toast.makeText(getContext(), holder, Toast.LENGTH_LONG).show();
    }

}

片段二

這是第二個片段的代碼示例

public class FragmentTwo extends Fragment{

    private NavController navController;
    private Button btn_exec_fragment_one_method;

    private void findViews(View view){
        btn_exec_fragment_one_method= view.findViewById(R.id.btn_exec_fragment_one_method);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_one, container, false);

    return view;

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        navController = Navigation.findNavController(view);
        findViews(view);

        btn_exec_fragment_one_method.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //HOW DO I CALL FRAGMENT ONE METHOD FROM HERE

                //The method with name "executeInFragmentTwo"

            }
        });
    }

}

請對此提供任何幫助,我們將不勝感激。

當用戶進入第二個片段時,您的第一個片段不會處於恢復狀態。

如果您需要從另一個屏幕/片段執行一個函數,那么您可能需要將此函數移動到與這些屏幕/片段所屬的圖形的生命周期或主機活動生命周期相關聯的ViewModel ,以便你在兩個屏幕/片段中得到相同的實例。

要注入與您的圖形一樣長的模型,請使用以下語法:

private val model: MyViewModel by navGraphViewModels(R.id.myGraph) { ViewModelFactory() }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM