Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于JSON键向ViewPager动态添加选项卡_Java_Android_Json_Android Fragments_Android Viewpager - Fatal编程技术网

Java 基于JSON键向ViewPager动态添加选项卡

Java 基于JSON键向ViewPager动态添加选项卡,java,android,json,android-fragments,android-viewpager,Java,Android,Json,Android Fragments,Android Viewpager,我用JSON获取不同事件的JSON数据,并根据下面附带的格式,根据每个事件中的键创建了一个事件类。然后,在解析JSON时,我将所有事件数据放入一个events ArrayList,稍后我将在一个ListView中使用扩展BaseAdapter的自定义适配器显示这些数据—这里一切正常运行,事件显示在ListView中 但我现在要做的是创建一个ViewPager,ViewPager中的选项卡是根据日期动态生成的。与计划中有3个不同的日期类似,一些事件发生在一个日期,而另一些事件发生在另一个日期,Vi

我用JSON获取不同事件的JSON数据,并根据下面附带的格式,根据每个事件中的键创建了一个事件类。然后,在解析JSON时,我将所有事件数据放入一个events ArrayList,稍后我将在一个ListView中使用扩展BaseAdapter的自定义适配器显示这些数据—这里一切正常运行,事件显示在ListView中


但我现在要做的是创建一个ViewPager,ViewPager中的选项卡是根据日期动态生成的。与计划中有3个不同的日期类似,一些事件发生在一个日期,而另一些事件发生在另一个日期,ViewPager将获得3个选项卡,并且在每个选项卡中,ListView中仅显示相应日期的事件,因此用户可以通过选择该日期选项卡来查看特定日期的事件。不幸的是,我一直被困在它,无法实现它

请指导和帮助我,我应该如何继续实现这一点,即标签是根据不同的日期动态生成的,只显示各自的事件

p、 事件JSON有一个关键日期

提前感谢:

我解析以获取日期的计划的JSON:

[
{
    "title": "Opening",
    "subtitle": "might be there",
    "start": "13:30",
    "end": "14:30",
    "location": "B01.063",
    "date": "2014-08-01",
    "authors": ["George Martin"],
    "type": "talk",
    "abstract": "http://..."
},
{
    "title": "Coffe break",
    "subtitle": "might be there",
    "start": "16:15",
    "end": "17:00",
    "location": "Crown room",
    "date": "2014-08-02",
    "authors": [],
    "type": "break",
    "abstract": "http://..."
}
]
事件类别:

public class EventScheduleItem {

private String title;

private String subtitle;

private String start;

private String end;

private String location;

private String date;

private String authors;

private String type;

private String eventAbstract;

//here are getter/setters and constructor for this class

}
这就是我创建事件Arraylist的方式:

列表事件记录数组=新数组列表

编辑:


在活动中尝试以下方法:

String[] tabs = {"Tab 1", "Tab 2", "Tab 3"};
mAdapter = new CustomPagerAdapter(getSupportFragmentManager(), tabs);
在你的寻呼机适配器中

private class CustomPagerAdapter extends FragmentStatePagerAdapter {

    String[] tabs;
    public CustomPagerAdapter(FragmentManager fragmentManager, String[] tabs) {
        super(fragmentManager);
        this.tabs = tabs;
    }

    @Override
    public Fragment getItem(int position) {
        //Something should go there which I don't know what should i do to get events for the date
    }

    @Override
    public int getCount() {
    return tabs.length();
    }

    @Override
    public CharSequence getPageTitle(int position){
        return tabs[position];
    }
}

我一直被它卡住,无法实现它-请展示您尝试的PagerAdapter实现,并解释您遇到的问题。@Commonware我试图实现它的脉络-不知道如何通过它来实现它,因为我的事件arraylist有事件,但是如果我重写getcount并返回不起作用的数组长度。先生,请帮助我,我将非常感激。我相信你将指导我的解决方案将是最好和最优化的解决方案之一。@commonware先生,请指导我,我该如何继续。那不起作用意味着什么?您已经告诉了我们很多我们不需要知道的事情,例如JSON格式,但几乎没有告诉我们您尝试了什么,特别是遇到了什么问题。在这里,您已经回答了115个关于堆栈溢出的问题,所以您肯定知道什么是一个好问题。给我们看一下你的PagerAdapter,告诉我们你用它做了什么和没有做过什么,比没有用的更详细。@Commonware先生,我是Android新手,还在学习这些概念。问题主要在于我需要使用的实现目标的方法。比如,我应该首先遍历events数组以找到不同的日期,然后创建单独的数组,例如arrayX,并维护来自主数组调用的事件索引,即arrayY和date在单独的数组中,然后,它会在每个事件中加载相同的片段,然后从arrayX获取该日期的事件索引,然后从arrayY查找事件吗?我编辑了问题并添加了我正在尝试的页面代码。请帮忙
private class CustomPagerAdapter extends FragmentStatePagerAdapter {

    String[] tabs;
    public CustomPagerAdapter(FragmentManager fragmentManager, String[] tabs) {
        super(fragmentManager);
        this.tabs = tabs;
    }

    @Override
    public Fragment getItem(int position) {
        //Something should go there which I don't know what should i do to get events for the date
    }

    @Override
    public int getCount() {
    return tabs.length();
    }

    @Override
    public CharSequence getPageTitle(int position){
        return tabs[position];
    }
}