gpt4 book ai didi

java - 在自定义日历中实现 ViewPager

转载 作者:行者123 更新时间:2023-11-30 04:02:01 25 4
gpt4 key购买 nike

我有一个带有 2 个选项卡的 FragmentActivity。每个选项卡调用一个 fragment - 日历和转换器:

public class Calendar extends SherlockFragmentActivity {

//create tabs
}


private class MyTabListener implements ActionBar.TabListener
{
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if(tab.getPosition()==0)
{
CalendarFragment frag = new CalendarFragment();
ft.replace(android.R.id.content, frag);
}
else
{
ConverterFragment frag = new ConverterFragment();
ft.replace(android.R.id.content, frag);
}
}
..

}

Calendar fragment ,我想为月 View 实现 ViewPager,以便用户在更改月份时可以滑动下一个/上一个。

这是我到目前为止的代码。但这所做的只是显示当前月份的日历。

public class CalendarFragment extends Fragment implements OnClickListener {

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.simple_calendar_view, container, false);

//set calendar adapter
//Code from http://w2davids.wordpress.com/android-simple-calendar/

context = this.getActivity().getApplicationContext();
CalendarPagerAdapter adapter = new CalendarPagerAdapter();
myPager = (ViewPager) v.findViewById(R.id.pager);
myPager.setAdapter(adapter);
myPager.setCurrentItem(1);
}


public class CalendarPagerAdapter extends PagerAdapter {

public int getCount() {
return NUM_AWESOME_VIEWS;
}

public Object instantiateItem(View collection, int position) {
Log.d("Object", "Instantiated");
LayoutInflater inflater = (LayoutInflater) collection.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

View v = inflater.inflate(R.layout.simple_calendar_view, null);

_calendar = Calendar.getInstance(Locale.getDefault());
month = _calendar.get(Calendar.MONTH) + 1;
year = _calendar.get(Calendar.YEAR);

calendarView = (GridView) v.findViewById(R.id.calendar);
calendarWeek = (GridView) v.findViewById(R.id.calendarweek);

calendarWeek.setAdapter(new CalendarWeekAdapter(context));
// Initialised
adapter = new GridCellAdapter(context, R.id.calendar_day_gridcell, month, year);
adapter.notifyDataSetChanged();
calendarView.setAdapter(adapter);

((ViewPager) collection).addView(v, 0);

return v;
}

@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView((View) arg2);

}

@Override
public void finishUpdate(View arg0) {
// TODO Auto-generated method stub

}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == ((View) arg1);

}

@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
// TODO Auto-generated method stub

}

@Override
public Parcelable saveState() {
// TODO Auto-generated method stub
return null;
}

@Override
public void startUpdate(View arg0) {
// TODO Auto-generated method stub

}

}

}

我被困在这里,因为我不知道如何在用户向左滑动时显示上个月的日历,以及在用户向右滑动时显示下个月的日历。

我尝试将此代码添加到 Object instantiateItem:

 switch(position){
case 0:
Log.d("ViewPager", "Prev");
if (month <= 1)
{
month = 12;
year--;
}
else
{
month--;
}
if (hmonth <= 1)
{
hmonth = 12;
hyear--;
}
else
{
hmonth--;
}
setGridCellAdapterToDate(month, year);
break;
case 2:

Log.d("ViewPager", "Next");
if (month > 11)
{
month = 1;
year++;
}
else
{
month++;
}
if (hmonth > 11)
{
hmonth = 1;
hyear++;
}
else
{
hmonth++;
}
setGridCellAdapterToDate(month, year);

break;
}

但是没有滑动发生。我哪里错了?

最佳答案

有时触摸事件监听器不能很好地协同工作。为 CalendarFragment 实现 onClickListenr 可能会从您的 PagerAdapter 窃取触摸事件。

-------- 编辑--------

If Log.d("对象", "实例化");每次滑动时都会显示在您的调试日志中,您的 PagerAdapter 正在工作。这意味着您如何更改要显示的当前月份存在问题。

试试这个:

// put this at the class level of calendarFragment.
Calendar holdTodaysDate = Calendar.getInstance(Locale.getDefault());


_calendar = Calendar.getInstance(Locale.getDefault());
_calendar = holdTodaysDate; // Add this line;
_calendar.add(Calendar.MONTH, position); // Add this line
month = _calendar.get(Calendar.MONTH) + 1;
year = _calendar.get(Calendar.YEAR);

这是在添加位置之前将日历重置为今天的日期。现在 _calendar 的方式是在 View 之间保持它的状态。

关于java - 在自定义日历中实现 ViewPager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12343524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com