0

我正在尝试创建一个类似于 Google Calendar on Day 模式的日历,您可以在其中滑动浏览日期并查看小时

我被困在如何在用户滑动时更新日期

这就是我所拥有的:

ListView 适配器

public class ListViewItems extends ArrayAdapter{
private Activity context;
private ArrayList<String> horarios;

public ListViewItems(Activity c, ArrayList<String> h){
    super(c, R.layout.listview_item, h);
    this.context = c;
    this.horarios = h;

}


@Override
public View getView(int position, View view, ViewGroup viewGroup){
    LayoutInflater inflater = context.getLayoutInflater();
    View v = inflater.inflate(R.layout.listview_item, null, true);
    TextView hor = (TextView)v.findViewById(R.id.horario);
    hor.setText(horarios.get(position));
    return v;
}
}

我为 Viewpage 设置适配器的 EventsFragment

public class EventsFragment extends Fragment  {
private SharedPreferences.Editor editor;
private SharedPreferences sharedPref;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    return inflater.inflate(R.layout.activity_events, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState){
    ViewPager vp = (ViewPager)view.findViewById(R.id.viewpager);
    SwipeAdapter sp = new SwipeAdapter(getActivity().getSupportFragmentManager());
    vp.setAdapter(sp);
    vp.setCurrentItem(249);
}

刷卡适配器

public class SwipeAdapter extends FragmentStatePagerAdapter {
public SwipeAdapter(FragmentManager fm){
    super(fm);
}
@Override
public Fragment getItem(int position) {
    Fragment fragment = new CalendarFragment();
    return fragment;
}

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

}

还有我的 CalendarFragment,我用一天中的时间填充 listView

public class CalendarFragment extends Fragment {

private Integer currentPosition;

public CalendarFragment(){

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    return inflater.inflate(R.layout.fragment_calendar, container, false);

}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState){
    super.onViewCreated(view, savedInstanceState);
    TextView text = (TextView)view.findViewById(R.id.day);
    Calendar currentDate = Calendar.getInstance();
    String day = Integer.toString(currentDate.get(Calendar.DAY_OF_MONTH));
    text.setText(day);
    ArrayList<String> horariosFixos = new ArrayList<String>();
    horariosFixos.add("01:00");
    horariosFixos.add("02:00");
    horariosFixos.add("03:00");
    horariosFixos.add("04:00");
    horariosFixos.add("05:00");
    horariosFixos.add("06:00");
    horariosFixos.add("07:00");
    horariosFixos.add("08:00");
    horariosFixos.add("09:00");
    horariosFixos.add("10:00");
    horariosFixos.add("11:00");
    horariosFixos.add("12:00");
    horariosFixos.add("13:00");
    horariosFixos.add("14:00");
    horariosFixos.add("15:00");
    horariosFixos.add("16:00");
    horariosFixos.add("17:00");
    horariosFixos.add("18:00");
    horariosFixos.add("19:00");
    horariosFixos.add("20:00");
    horariosFixos.add("21:00");
    horariosFixos.add("22:00");
    horariosFixos.add("23:00");
    horariosFixos.add("00:00");

    ListViewItems events = new ListViewItems(getActivity(),horariosFixos);
    ListView events_list = (ListView)view.findViewById(R.id.events_list);
    events_list.setAdapter(events);


}

它正在工作,但我只是想不出更新日期的方法。我尝试了一些方法,例如存储 SwipeAdapter 上给出的位置并从 getInstance() 中添加或减去一天,但它似乎没有用

任何帮助,将不胜感激。

4

1 回答 1

0

好吧,我不知道我是否能明确地回答你的问题,但我也许可以帮助你阐明一些观点或让你深思。

在我的代码中,我设置了一个 View Pager Listener。如果你可以在你的代码中做到这一点,我认为它会给你你正在寻找的功能。

以下是我的一个应用程序的示例:

public void setViewPagerListener()
        {
            view_pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener()
            {
                @Override
                public void onPageSelected(int position)
                {
                    //Log.i(TAG, "position: " + position);
                    // on changing the page
                    // make respected tab selected
                    //actionBar.setSelectedNavigationItem(position);
                }

                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
                {
                    //Log.i(TAG, "positionOffset: " + positionOffset);
                    if (positionOffset >= .7)
                    {
                        handler_scrim_alpha.post(setScrimAlphaRunnable(.1f));
                    }
                    else if (positionOffset < .7 && positionOffset >= .4)
                    {
                        handler_scrim_alpha.post(setScrimAlphaRunnable(.3f));
                    }
                    else if (positionOffset < .5 & positionOffset >= .2)
                    {
                        handler_scrim_alpha.post(setScrimAlphaRunnable(.5f));
                    }
                    else if (positionOffset < .2 && !(positionOffset == 0))
                    {
                        handler_scrim_alpha.post(setScrimAlphaRunnable(.7f));
                    }
                }

                @Override
                public void onPageScrollStateChanged(int scrollState)
                {
                    /*scrollState == 0 when the pager is idle and has finished it's scroll.*/
                    scroll_state_global = scrollState;

                    if (scrollState == 0 && view_pager.getCurrentItem() == 1)
                    {
                        scroll_state_global = -1;
                        frame_input_scrim.setVisibility(View.INVISIBLE);
                        view_pager.setVisibility(View.INVISIBLE);
                    }
                }
            });
        }
于 2017-02-26T23:48:08.873 回答