簡體   English   中英

為主從視圖片段創建“下一個”和“上一個”方法的類

[英]Create a class for “Next” & “Previous” method for Master-Detail view fragments

我想創建一個包含上一個和下一個按鈕的類。 該類將有助於減少我必須為每個類中的每個按鈕編寫的重復代碼的數量。 例如,在FirstPage.class片段內部調用以下代碼。

PageTransition.pageContents(CaseContent.getSize(),getArguments()。getString(ARG_ITEM_ID),button_next,button_prev);

下一個和上一個按鈕存儲在header.xml中,在每個布局中我都調用了它。 我為代碼使用了主從視圖。

我試圖為我的課程在CaseListActivity中使用相同的代碼。 但是,我有一個問題getSupportFragmentManager當我試圖把代碼添加到里面下一頁PageTransition()方法。

捆綁參數= new Bundle(); 片段片段; arguments.putString(FirstPage.ARG_ITEM_ID,id); 片段= new FirstPage(); fragment.setArguments(arguments); getSupportFragmentManager()。beginTransaction()
.replace(R.id.case_detail_container,片段).commit();

有沒有更好的方法來構造我的過渡班?

CaseListActivity.java

public class CaseListActivity extends AppCompatActivity {

    ....

    //Method:- direct user to selected Item page

        void onSelectedMenuItem(String id, View v) {

            Bundle arguments = new Bundle();
            Fragment fragment;

            //in landscape
            switch (id) {
                case "1":
                    arguments.putString(FirstPage.ARG_ITEM_ID, id);
                    fragment = new FirstPage();
                    break;

                ... // case continues untill 12

                    break;
                case "11":
                    arguments.putString(ElevethPage.ARG_ITEM_ID, id);
                    fragment = new ElevethPage();

                    break;
                case "12":
                    arguments.putString(LastPage.ARG_ITEM_ID, id);
                    fragment = new LastPage();

                    break;
                default:
                    arguments.putString(FirstPage.ARG_ITEM_ID, id);
                    fragment = new FirstPage();
                    break;
            }

            fragment.setArguments(arguments);
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.case_detail_container, fragment)
                    .commit();

            //in potrait
            if (onePane) {

                //hide recyclerview list and show containerview
                final DisplayMetrics displayMetrics = new DisplayMetrics();
                getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

                assert recyclerView != null;
                final ViewGroup.LayoutParams paramsRecyclerView = recyclerView.getLayoutParams();
                assert containerView != null;
                final ViewGroup.LayoutParams paramsContainerView = containerView.getLayoutParams();
                paramsRecyclerView.width = 0;
                paramsContainerView.width = displayMetrics.widthPixels;
                recyclerView.setLayoutParams(paramsRecyclerView);
                containerView.setLayoutParams(paramsContainerView);

                //show expand recylcerview list button
                ActionButton.setVisibility(View.VISIBLE);

            }
        }

        ....
    }

FirstPage.java

public class FirstPage extends Fragment {

public static final String ARG_ITEM_ID = "item_id";
...

public void onViewCreated(final View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

//      TODO: next & prev button
        TextView button_prev = (TextView) view.findViewById(R.id.btn_prev);
        TextView button_next = (TextView) view.findViewById(R.id.btn_nxt);
        PageTransition.pageContents(CaseContent.getSize(), getArguments().getString(ARG_ITEM_ID), button_next, button_prev);
        ....
    }

}

PageTransition.java

public class PageTransition {

    public static final String TAG = PageTransition.class.getSimpleName();

    //take number of pages
    public static void pageContents(int totalPage, String id, TextView next, TextView previous) {
        //change string string to int
        int pageID = Integer.parseInt(id);
        final int prevID, nextID; // id for next & prev page

        if(pageID == 1) {
            previous.setVisibility(View.GONE); //hide prev button onn 1st page

            prevID = 0;
            nextID = ++pageID;

            next.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    nextPage(nextID);
                }
            });

            Log.d(TAG, "pageContents: first page");

        } else if (pageID < totalPage - 1 && pageID !=1) {
            prevID = --pageID;
            nextID = 2+pageID;

            next.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    nextPage(nextID);
                }
            });

            previous.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    prevPage(prevID);
                }
            });


        } else if (pageID == totalPage) {
            next.setVisibility(View.GONE); //hide next button on last page

            prevID = --pageID;
            nextID = 0;

            previous.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    prevPage(prevID);
                }
            });
        }

    }

    private static void nextPage(int id) {

        Log.d(TAG, "nextPage: id " + id);

    }

    private static void prevPage(int id) {

        Log.d(TAG, "prevPage: id " + id);

    }
}

經過一番思考,我終於能夠解決它。 我必須發送當前片段,該片段包含該類的“下一步”和“上一步”按鈕。 只有這樣,我才能使用getFragmentManager 我在FirstPage.java中使用以下代碼來設置“下一個”和“上一個”按鈕。

PageTransition.pageContents( this ,CaseContent.getSize(),“ formA ”,getArguments()。getString(ARG_ITEM_ID),button_next,button_prev);

然后在項目列表中,只要在項目列表菜單之一上單擊,就添加此代碼。

片段片段= PageTransition.init(id,“ formA”); getSupportFragmentManager()。beginTransaction().replace(R.id.case_detail_container,fragment).commit();

PageTransition.java

public class PageTransition {

    public static final String TAG = PageTransition.class.getSimpleName();
    private static int pageId;

    public static Fragment init(String id, String form) {
        Log.d(TAG, "currentPage: id " + id);
        pageId = Integer.valueOf(id); //set current page Id

        switch(form) {
            case "formA" :
                return formA_caseContent(id);
            case "formB" :
                return formB_caseContent(id);
            case "formC" :
                return formC_caseContent(id);
            default:
                Log.d(TAG, "currentPage: form id " + form + " out of bound.");
                return null;
        }
    }

    public static void pageContents(final Fragment fragment, int totalPage, final String form, String id, TextView next,
                                    TextView previous) {
        //change string string to int
        int pageID = Integer.parseInt(id);
        int prevID = 0, nextID = 0;

        if(pageID == 1) {
            previous.setVisibility(View.GONE); //hide prev button onn 1st page
            nextID = ++pageID;

        } else if (pageID > 1 && pageID < totalPage ) {
            prevID = --pageID;
            nextID = 2+pageID;

        } else if (pageID == totalPage) {
            next.setVisibility(View.GONE); //hide next button on last page
            prevID = --pageID;

        }

        final int finalNextID = nextID;
        next.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Fragment _fragment = init(String.valueOf(finalNextID), form);
                    fragment.getFragmentManager().beginTransaction()
                            .replace(R.id.case_detail_container, _fragment).commit();
                }
            });

        final int finalPrevID = prevID;
        previous.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Fragment _fragment = init(String.valueOf(finalPrevID), form);
                    fragment.getFragmentManager().beginTransaction()
                            .replace(R.id.case_detail_container, _fragment).commit();
                }
            });

    }

    private static Fragment formA_caseContent(String id) {

        Bundle arguments = new Bundle();
        Fragment fragment;

        switch (id) {
            case "1":
                arguments.putString(FirstPage.ARG_ITEM_ID, id);
                fragment = new FirstPage();

                break;
            case"2":
                arguments.putString(SecondPage.ARG_ITEM_ID, id);
                fragment = new SecondPage();

                break;
            ....
            default:
                Log.i(TAG, "onSelectedMenuItem: Selection out of bound.");
                arguments.putString(FirstPage.ARG_ITEM_ID, id);
                fragment = new FirstPage();
                break;
        }

        fragment.setArguments(arguments);
        return fragment;
    }

    private static Fragment formB_caseContent(String id) {}

    private static Fragment formc_caseContent(String id) {}
}

暫無
暫無

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

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