简体   繁体   English

请帮我实例

[英]Please help me with Instance

I have two buttons "start hotel1" and "start hotel2". 我有两个按钮“ start hotel1”和“ start hotel2”。 when you click on them, I create a fragment in which ViewPager: 当您单击它们时,我在其中创建了一个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";
        }
    }
}

I load it in another fragment that takes different parameters, depending on the button: 我将其加载到采用不同参数的另一个片段中,具体取决于按钮:

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) {
         ....
        }
    }
}

First pressing any key data normally loaded. 首先按任何通常加载的键数据。 After they loaded I click on the second button, and I have an empty screen. 他们加载后,我单击第二个按钮,并且我有一个空白屏幕。 Log just says that the instance is not created. 日志只是说没有创建实例。 I need something to clean or rebuild? 我需要清洁或重建吗? how? 怎么样?

 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;

Don't ever override the Fragment constructor, because they MUST have an empty constructor. 永远不要重写Fragment构造函数,因为它们必须有一个空的构造函数。 Create the same newInstance method in your PagerContainer , and grab the parameter from it: 在您的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