2014-11-06 66 views
0

我有兩個按鈕「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; 
+0

顯示你的代碼中要執行的點擊,該代碼是不完整的。 – 2014-11-06 07:44:18

+0

我添加了代碼 – 2014-11-06 07:50:35

回答

0

永遠不要覆蓋Fragment構造,因爲他們MUST有一個空的構造。在PagerContainer創建相同newInstance方法,並從中攫取參數:

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; 
} 
+0

我重寫了代碼,但它沒有解決問題 – 2014-11-06 08:11:03

+0

我替換了FragmentStatePagerAdapter上的適配器,問題消失。不知道這是對的。 – 2014-11-06 08:16:00

+0

好消息。但將來不要將參數傳遞給fragment的構造函數:) – rom4ek 2014-11-06 08:20:09