2014-07-18 1 views
-1

프로젝트 내부에서 캘린더를 만들려고합니다. 스 와이프 가능한 조각으로 만들고 싶습니다. 그래서 현재 내가 스 와이프 탭스 와이프 할 수있는 조각으로 만든 Android 캘린더 앱

public class FragmentTabsAdapter extends FragmentPagerAdapter { 

    public FragmentTabsAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Fragment fragment; 
     switch (position) { 
     case 0: 
      fragment = new Fragment1(); 
      break; 
     case 1: 
      fragment = new Fragment2(); 
      break; 
     case 2: 
      fragment = new Fragment3(); 
      break; 
     default: 
      fragment = null; 
     } 
     return fragment; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
     case 0: 
      return ("January"); 
     case 1: 
      return ("February"); 
     case 2: 
      return ("March"); 
     } 
     return null; 
    } 

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

에 대한 어댑터를 데 그리고이 Fragment1입니다

public class Fragment1 extends Fragment { 

    public Fragment1() { 
     // Empty constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment1, container, false); 
     GridView gridview = (GridView) rootView.findViewById(R.id.gridView1); 
     Calendar mMonth = Calendar.getInstance(); 
     gridview.setAdapter(new CalendarAdapter(getActivity(), mMonth)); 
     return rootView; 
    } 

} 

(다른 2 identidcal 있습니다)이 그리드 뷰를 사용하여, 일정이 채워됩니다있는 코드입니다

public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    TextView dayView; 
    if (convertView == null) { 
     LayoutInflater vi = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.calendar_item, null); 
    } 
    v.setLayoutParams(new GridView.LayoutParams((int) Math.ceil((parent.getWidth()/7)), (int) Math.ceil((parent.getWidth()/7)))); 
    dayView = (TextView) v.findViewById(R.id.date); 
    dayView.setText(days[position].toString()); 
    dayView.setPadding(10, 10, 10, 10); 
    if (days[position].getMonth() - 1 != month.get(Calendar.MONTH) || days[position].getYear() != month.get(Calendar.YEAR)) { 
     dayView.setTextColor(Color.rgb(154, 154, 154)); 
    } else { 
     if (days[position].hasEvent()) { 
      if (days[position].getIsSelected()) { 
       v.setBackgroundColor(Color.RED); 
      } else { 
       dayView.setTextColor(Color.BLACK); 
      } 
     } else { 
      if (days[position].getIsSelected()) { 
       dayView.setTextColor(Color.WHITE); 
      } else { 
       dayView.setTextColor(Color.BLACK); 
      } 
     } 
    } 
    return v; 
} 

, 만 3 조각을 사용하여 완전한 기능의 달력을 만들기 위해, 사용자가 측면에 와이프로가 재활용하기 위해 가능하면 그렇게 시간은 내가 알고 싶은 다른 달에 대해 각각 100 개의 단편을 가질 필요없이 어떤 날짜에도 갈 수 있습니다. 어떻게해야합니까?

+0

그냥 같은'Fragment' 클래스를 사용하고 전달하는 현재'은'Fragment'에 Date' . –

답변

1

Date을 동일한 Fragment 클래스로 전달하기 만하면됩니다. 통상은, static 팩토리 메소드가 이것에 사용됩니다. 나는 그에 따라 Fragment 수정 : 그래서

public static class ExampleFragment extends Fragment { 

    private static final String EXTRA_DATE = "date"; 

    // With this method you can create a new Instance of this 
    // ExampleFragment. The Date is passed to the Fragment 
    // through a Bundle 
    public static Fragment newInstance(Date date) { 
     ExampleFragment fragment = new ExampleFragment(); 

     Bundle arguments = new Bundle(); 
     arguments.putSerializable(EXTRA_DATE, date); 
     fragment.setArguments(arguments); 

     return fragment; 
    } 

    private GridView gridView; 
    private Date date; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment1, container, false); 

     this.gridView = (GridView) rootView.findViewById(R.id.gridView1); 

     return rootView; 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     // Here we retrieve the Date from the Bundle 
     Bundle arguments = getArguments(); 
     if(arguments != null) { 
      this.date = (Date) arguments.getSerializable(EXTRA_DATE); 
      // Do whatever you want with the Date 
     } 
    } 
} 

을이 ExampleFragment 당신의 Adapter과 같을 것이다 :

@Override 
public Fragment getItem(int position) { 

    int yearsToAdd = position/12; 

    // Here we create a Date based on the position, 
    // We set the Date to be at the start of each month 
    Calendar calendar = Calendar.getInstance(); 
    calendar.add(Calendar.YEAR, yearsToAdd); 
    calendar.set(Calendar.MONTH, position); 
    calendar.set(Calendar.DAY_OF_MONTH, 0); 
    calendar.set(Calendar.HOUR_OF_DAY, 0); 
    calendar.set(Calendar.MINUTE, 0); 
    calendar.set(Calendar.SECOND, 0); 
    Date date = calendar.getTime(); 

    // Here we return a new instance of the ExampleFragment 
    // And pass along the Date from above 
    return ExampleFragment.newInstance(date); 
} 
+0

return ExampleFragment.newInstance (date); 이 newInstance 메소드는 무엇입니까? 나는 그것을 가지고 있지 않으며, 인스턴스 생성 만하고, 컨텍스트가 필요합니다. –

+0

내 코드를 보셨나요? 바로 거기에서 정의했습니다. –

+0

죄송합니다. 몇 줄을 놓쳤습니다. 다시 확인하겠습니다. –