我有一个“ wholeYearRiskArray”的ArrayList,在ArrayList的每个索引处,还有另一个JSONObjects的ArrayList,其中包含每月的新闻/风险。每个索引代表一个月的新闻/风险。
我想在ListView中显示每个JSONObject的displaydatesubject属性。
因为每个月的数据都被索引分隔为其他月份的数据。

我想在ViewPager中生成没有任何选项卡的片段。每个片段将保存一个月的每个数据。碎片将根据wholeYearRisksArray的大小动态生成。

这是调试模式下的图片。

http://i.imgur.com/3RvqDMn.png

这是我要实现的图片。

http://i.imgur.com/NQdkUXr.png

这是我的MainActivity.java代码。

public class MainActivity extends AppCompatActivity {

    public static String TAG = MainActivity.class.getSimpleName();
    ArrayList<Risks> risksArrayList = new ArrayList<>();
    HashMap<String, String> firstObjectHashMap = new HashMap<>();
    HashMap<String, String> lastObjectHashMap = new HashMap<>();
    String latestDateStr;
    String oldestDateStr;
    DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
    DateTime formatedLatestDate;
    DateTime formatedOldestDate;
    DateTime upDate;

    JSONArray filteredJSONArray = new JSONArray();
    ArrayList<ArrayList<JSONObject>> wholeYearRiskArray = new ArrayList<>();
    Risks risks = new Risks();
    private String JsonUrl = "https://api.myjson.com/bins/4goeq";  // https://api.myjson.com/bins/4goeq
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RequestQueue queue = Volley.newRequestQueue(this);
        StringRequest req = new StringRequest(JsonUrl,

                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        try {
                            JSONObject jsonObject = new JSONObject(response);
                            JSONArray jsonArray = jsonObject.getJSONArray("data");

                            for (int i = 0; i < jsonArray.length(); i++) {

                                JSONObject jsonObjectFromArray = jsonArray.getJSONObject(i);

                                if (jsonObjectFromArray.getString("publishtype").equals("PUBLISHED")) {

                                    filteredJSONArray.put(jsonObjectFromArray);

                                    risks.setUID(jsonObjectFromArray.getString("UID"));
                                    risks.setSubject(jsonObjectFromArray.getString("subject"));
                                    risks.setArticletext(jsonObjectFromArray.getString("articletext"));
                                    risks.setDisplaydate(jsonObjectFromArray.getString("displaydate"));
                                    risks.setPublishdate(jsonObjectFromArray.getString("publishdate"));
                                    risks.setKeywords(jsonObjectFromArray.getString("keywords"));
                                    risks.setPublishdate(jsonObjectFromArray.getString("publishtype"));
                                    risks.setTimestamp(jsonObjectFromArray.getString("timestamp"));

                                    risksArrayList.add(risks);
                                }
                            }
                            risksArrayList.get(0);

                            JSONObject firstObjectFromJsonArray = filteredJSONArray.getJSONObject(0);
                            JSONObject lastObjectFromJsonArray = filteredJSONArray.getJSONObject(filteredJSONArray.length() - 1);

                            firstObjectHashMap.put("UID", firstObjectFromJsonArray.getString("UID"));
                            firstObjectHashMap.put("subject", firstObjectFromJsonArray.getString("subject"));
                            firstObjectHashMap.put("articletext", firstObjectFromJsonArray.getString("articletext"));
                            firstObjectHashMap.put("displaydate", firstObjectFromJsonArray.getString("displaydate"));
                            firstObjectHashMap.put("publishdate", firstObjectFromJsonArray.getString("publishdate"));
                            firstObjectHashMap.put("keywords", firstObjectFromJsonArray.getString("keywords"));
                            firstObjectHashMap.put("publishtype", firstObjectFromJsonArray.getString("publishtype"));
                            firstObjectHashMap.put("timestamp", firstObjectFromJsonArray.getString("timestamp"));

                            lastObjectHashMap.put("UID", lastObjectFromJsonArray.getString("UID"));
                            lastObjectHashMap.put("subject", lastObjectFromJsonArray.getString("subject"));
                            lastObjectHashMap.put("articletext", lastObjectFromJsonArray.getString("articletext"));
                            lastObjectHashMap.put("displaydate", lastObjectFromJsonArray.getString("displaydate"));
                            lastObjectHashMap.put("publishdate", lastObjectFromJsonArray.getString("publishdate"));
                            lastObjectHashMap.put("keywords", lastObjectFromJsonArray.getString("keywords"));
                            lastObjectHashMap.put("publishtype", lastObjectFromJsonArray.getString("publishtype"));
                            lastObjectHashMap.put("timestamp", lastObjectFromJsonArray.getString("timestamp"));

                            oldestDateStr = firstObjectHashMap.get("publishdate");
                            latestDateStr = lastObjectHashMap.get("publishdate");

                            oldestDateStr = oldestDateStr.substring(0, 10);
                            oldestDateStr = oldestDateStr + " 00:00:00";

                            formatedOldestDate = fmt.parseDateTime(oldestDateStr);
                            formatedLatestDate = fmt.parseDateTime(latestDateStr);

                            int daysInMonth;

                            ArrayList<JSONObject> perMonthRisksArray = new ArrayList<JSONObject>();

                            while (formatedOldestDate.isBefore(formatedLatestDate) || formatedOldestDate.isEqual(formatedLatestDate)) {

                                daysInMonth = formatedOldestDate.dayOfMonth().getMaximumValue();
                                upDate = formatedOldestDate.plusDays(daysInMonth - 1);

                                long formatedLatestDateMillis = formatedOldestDate.getMillis();
                                long upDateMillis = upDate.getMillis();

                                perMonthRisksArray = fetchObjectsByDate(filteredJSONArray, formatedLatestDateMillis, upDateMillis);

                                wholeYearRiskArray.add(perMonthRisksArray);
                                formatedOldestDate = upDate.plusDays(1);

                            }
                            wholeYearRiskArray.get(0);
                            Log.d(TAG, Integer.toString(wholeYearRiskArray.size()));
                            risksArrayList.get(0);

                        } catch (JSONException e) {
                            e.printStackTrace();
                            Toast.makeText(getApplicationContext(),
                                    "Error: " + e.getMessage(),
                                    Toast.LENGTH_LONG).show();
                        }
                    }
                }
                , new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_SHORT).show();

            }
        }
        );
        queue.add(req);
    }

    public ArrayList<JSONObject> fetchObjectsByDate(JSONArray array, long startDate, long endDate) {
        final ArrayList<JSONObject> list = new ArrayList<>();

        for (int i = 0; i < array.length(); i++) {
            final JSONObject object = array.optJSONObject(i);
            if (object != null) {
                final String dateStr = object.optString("publishdate");
                if (dateStr != null) {

                    final long date = fmt.parseDateTime(dateStr).getMillis();
                    if ((date >= startDate) && (date <= endDate)) {
                        list.add(object);
                    }
                }
            }
        }
        return list;
    }
}


这是我的Risks.Java代码。

public class Risks {

    String UID;
    String subject;
    String articletext;
    String displaydate;
    String publishdate;
    String keywords;
    String publishtype;
    String timestamp;

    public String getUID() {
        return UID;
    }

    public void setUID(String UID) {
        this.UID = UID;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getDisplaydate() {
        return displaydate;
    }

    public void setDisplaydate(String displaydate) {
        this.displaydate = displaydate;
    }

    public String getArticletext() {
        return articletext;
    }

    public void setArticletext(String articletext) {
        this.articletext = articletext;
    }

    public String getPublishdate() {
        return publishdate;
    }

    public void setPublishdate(String publishdate) {
        this.publishdate = publishdate;
    }

    public String getKeywords() {
        return keywords;
    }

    public void setKeywords(String keywords) {
        this.keywords = keywords;
    }

    public String getPublishtype() {
        return publishtype;
    }

    public void setPublishtype(String publishtype) {
        this.publishtype = publishtype;
    }

    public String getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }
}


我应该使用ListView还是TableLayout或LayoutInflator?

我如何动态生成没有任何选项卡的片段并根据上述情况显示数据?

最佳答案

好的,首先您需要将所有必需的添加到列表中。
那么您必须创建一个自定义列表,并为列表创建单独的布局。
然后将列表中的所有数据放入自定义列表。这是解决方案。
选中此https://stackoverflow.com/a/8166802/5275639,它将为您提供帮助。

09-10 08:21
查看更多