请帮我实例

时间:2014-11-06 07:36:34

标签: java android

我有两个按钮“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) {
         ....
        }
    }
}

首先按下正常加载的任何关键数据。加载后我点击第二个按钮,我有一个空屏幕。 Log只是说没有创建实例。我需要清洁或重建的东西?如何?

 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;

1 个答案:

答案 0 :(得分:0)

不要覆盖Fragment构造函数,因为必须具有空构造函数。在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;
}