我有一个“ wholeYearRiskArray”的ArrayList,在ArrayList的每个索引处,还有另一个JSONObjects的ArrayList,其中包含每月的新闻/风险。每个索引代表一个月的新闻/风险。
我想在ListView中显示每个JSONObject的displaydate
和subject
属性。
因为每个月的数据都被索引分隔为其他月份的数据。
我想在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,它将为您提供帮助。