【问题标题】:Create a class for "Next" & "Previous" method for Master-Detail view fragments为 Master-Detail 视图片段的“Next”和“Previous”方法创建一个类
【发布时间】:2017-10-03 04:43:55
【问题描述】:

我想创建一个包含上一个和下一个按钮的类。该课程将有助于减少我必须为每个课程中的每个按钮编写的重复代码的数量。例如,以下代码在 FirstPage.class 片段中被调用。

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

下一个和上一个按钮存储在我在每个布局中调用的 header.xml 中。我对代码使用了主从视图。

我尝试在 CaseListActivity 中为我的班级使用相同的代码。但是,当我尝试将代码添加到 PageTransition 中的 nextPage() 方法时,我遇到了 getSupportFragmentManager 问题。

捆绑参数 = new Bundle();片断片断; arguments.putString(FirstPage.ARG_ITEM_ID, id);片段 = 新的 第一页();片段.setArguments(参数); 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);

    }
}

【问题讨论】:

    标签: java android android-fragments onclicklistener fragmentmanager


    【解决方案1】:

    经过一番思考,我终于可以解决了。我必须将当前片段发送给班级,其中包含“下一个”和“上一个”按钮。只有这样,我才能使用 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,片段) .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) {}
    }
    

    【讨论】:

      猜你喜欢
      • 2012-11-23
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      相关资源
      最近更新 更多