簡體   English   中英

請幫我實例

[英]Please help me with Instance

我有兩個按鈕“ start hotel1”和“ start hotel2”。 當您單擊它們時,我在其中創建了一個ViewPager片段:

public class PagerContainer extends Fragment {
    static final int PAGE_COUNT = 2;
    private String hotel;

    public PagerContainer(String hotel) {
        this.hotel = hotel;
    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.pager_container, null);
        ViewPager pager = (ViewPager) v.findViewById(R.id.pager);
        PagerAdapter pagerAdapter = new MyFragmentPagerAdapter(getActivity().getSupportFragmentManager());
        pager.setAdapter(pagerAdapter);
        pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {
                Log.d("LOG", "onPageSelected, position = " + position);
            }

            @Override
            public void onPageScrolled(int position, float positionOffset,
                                       int positionOffsetPixels) {
            }

            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
        return v;
    }

    private class MyFragmentPagerAdapter extends FragmentPagerAdapter {
        public MyFragmentPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            return CalendarView.newInstance(position,hotel);

        }

        @Override
        public int getCount() {
            return PAGE_COUNT;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return "title";
        }
    }
}

我將其加載到采用不同參數的另一個片段中,具體取決於按鈕:

public class CalendarView extends Fragment {

    static final String ARGUMENT_PAGE_NUMBER = "arg_page_number";
    static final String ARGUMENT_HOTEL = "arg_hotel";

    private int pageNumber;
    private String hotel;

    static CalendarView newInstance(int page,String hotel) {
        Log.d("myLOG","newInstance");
        CalendarView calendarView = new CalendarView();
        Bundle arguments = new Bundle();
        arguments.putInt(ARGUMENT_PAGE_NUMBER, page);
        arguments.putString(ARGUMENT_HOTEL, hotel);
        calendarView.setArguments(arguments);
        return calendarView;
    }
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.calendar, null);
        pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER);
        hotel = getArguments().getString(ARGUMENT_HOTEL);
        ...
        return v;
    }

    public class NewThread extends AsyncTask<String, Void, String> {

        protected String doInBackground(String... strings) {  
          ...
        }

        @Override
        protected void onPostExecute(String s) {
         ....
        }
    }
}

首先按任何通常加載的鍵數據。 他們加載后,我單擊第二個按鈕,並且我有一個空白屏幕。 日志只是說沒有創建實例。 我需要清潔或重建嗎? 怎么樣?

 case CONFEENCE_GRUP_NODE:
                Fragment conference;
                switch (position2) {
                    case HOLIDAY:
                        conference = new PagerContainer("holiday");
                        fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
                        fragmentManager.beginTransaction().replace(R.id.content_frame, conference).commit();
                        break;
                    case CITY:
                        conference = new PagerContainer("city");
                        fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
                        fragmentManager.beginTransaction().replace(R.id.content_frame, conference).commit();
                        break;
                }
                break;

永遠不要重寫Fragment構造函數,因為它們必須有一個空的構造函數。 在您的PagerContainer創建相同的newInstance方法,並PagerContainer獲取參數:

private static final String ARGUMENT_PAGE_HOTEL = "arg_page_hotel";

public PagerContainer() {
}

public static PagerContainer newInstance(String hotel) {
    PagerContainer container = new PagerContainer();
    Bundle arguments = new Bundle();
    arguments.putString(ARGUMENT_PAGE_HOTEL, hotel);
    container.setArguments(arguments);
    return container;
}

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.pager_container, null);
    hotel = getArguments().getString(ARGUMENT_PAGE_HOTEL);
    ...
    return v;
}

暫無
暫無

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

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