我正在制作一个应用程序,其中我从URL接收一些JSON数据,如所示 Image所示。基本上每个日期数组中都有5个对象,我正在使用此代码段从每个日期数组中获取会话并将会话转换为值。
JSONObject jsonObject = new JSONObject(response);
JSONObject dataObj = jsonObject.getJSONObject("data");
Iterator<String> iter = dataObj.keys();
while (iter.hasNext()) {
key = iter.next();
JSONArray datesArray = dataObj.getJSONArray(key);
sessionsfrom = new ArrayList<String>();
JSONObject datesObjectt = datesArray.getJSONObject(4);
for (int i = 0; i < datesArray.length(); i++) {
JSONObject datesObject = datesArray.getJSONObject(i);
sessionsfrom.add(datesObject.getString("session_from") + " - " +datesObject.getString("session_to") );
mBaseRecyclerAdapter.setItems(sessionsfrom);
}
在最后一行中,我将所有会话和从会话到值的所有存储在arraylist中,并放入回收器视图的适配器中。这些会话正在此应用中创建时隙,如Image所示 现在,我想要的是我必须将 bookingFound值从json保存到会话和会话到值之间的某个位置,即它不显示在应用程序中,但在每个广告位的背景中,bookingFoung的每个值都必须是存储,以便在填充 viewholder 时,我可以检查哪些bookingFound插槽返回true,哪些返回false,以便在bookingFoundtrue时将插槽的颜色更改为灰色
要填充视图持有人,我需要以下代码
private BaseRecyclerAdapter<String, CourtDetailsTimeViewHolder> mBaseRecyclerAdapter = new BaseRecyclerAdapter<String, CourtDetailsTimeViewHolder>(CourtDetailsTimeViewHolder.class, R.layout.item_court_details_availability_time) {
@Override
protected void populateViewHolder(CourtDetailsTimeViewHolder viewHolder, String model, int position) {
// SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
//String name = preferences.getString("slotfound", "");
viewHolder.mCheckBox.setOnCheckedChangeListener(null);
viewHolder.mCheckBox.setText(model);
viewHolder.mCheckBox.setChecked(getChecked(model));
/*for (int i = 0; i < bookingcheck.size(); i++) {
if (bookingcheck.get(i).contains("true")) {
viewHolder.mCheckBox.setEnabled(false);
viewHolder.mCheckBox.setBackgroundResource(R.drawable.slctr_bg_cb_challenges_details_disable);
} else {
viewHolder.mCheckBox.setEnabled(true);
viewHolder.mCheckBox.setBackgroundResource(R.drawable.slctr_bg_cb_challenges_details);
}
}*/
}
};
在此代码中,注释的部分是我尝试过的部分,但没有用。我将bookingFound值放在bookingcheck数组列表中,然后检查它是否包含true,然后禁用插槽,否则启用了它,但是它不起作用...请帮助
结论
1-存储bookingFound json值,就像会话和值之间的会话
2-使用该值在应用程序上启用或禁用插槽
答案 0 :(得分:0)
快速修复
使用
datesObject.getString("session_from") + " - " +datesObject.getString("session_to")+"$"+datesObject.get("bookingFound").getAsBoolean()
显示会话使用时
String Session = "02:00 AM - 02:30 AM$true";
String[] separated = currentString.split("$");
separated[0]; // this will contain "02:00 AM - 02:30 AM"
separated[1]; // this will contain "true"
for (int i = 0; i < bookingcheck.size(); i++) {
if (bookingcheck.get(i).contains("true")) {
viewHolder.mCheckBox.setEnabled(false);
viewHolder.mCheckBox.setBackgroundResource(R.drawable.slctr_bg_cb_challenges_details_disable);
} else {
viewHolder.mCheckBox.setEnabled(true);
viewHolder.mCheckBox.setBackgroundResource(R.drawable.slctr_bg_cb_challenges_details);
}
}
答案 1 :(得分:0)
您必须更改一些代码。首先,为会话创建一个自定义对象,以提高性能和代码设计
public class SessionModel {
String sessionFrom;
String sessionTo;
boolean sessionFound;
public SessionModel(String sessionFrom, String sessionTo, boolean sessionFound) {
this.sessionFrom = sessionFrom;
this.sessionTo = sessionTo;
this.sessionFound = sessionFound;
}
public String getSessionFrom() {
return sessionFrom;
}
public void setSessionFrom(String sessionFrom) {
this.sessionFrom = sessionFrom;
}
public String getSessionTo() {
return sessionTo;
}
public void setSessionTo(String sessionTo) {
this.sessionTo = sessionTo;
}
public boolean isSessionFound() {
return sessionFound;
}
public void setSessionFound(boolean sessionFound) {
this.sessionFound = sessionFound;
}
}
然后创建此对象的数组列表,并在适配器中“在完成循环之后”使用此数组列表
JSONObject jsonObject = new JSONObject(response);
JSONObject dataObj = jsonObject.getJSONObject("data");
Iterator<String> iter = dataObj.keys();
while (iter.hasNext()) {
key = iter.next();
JSONArray datesArray = dataObj.getJSONArray(key);
sessionsfrom = new ArrayList<SessionModel>();
JSONObject datesObjectt = datesArray.getJSONObject(4);
for (int i = 0; i < datesArray.length(); i++) {
JSONObject datesObject = datesArray.getJSONObject(i);
sessionsfrom.add(SessionModel(datesObject.getString("session_from"), datesObject.getString("session_to"), datesObject.getboolean("bookinFound")));
}
mBaseRecyclerAdapter.setItems(sessionsfrom);
在您的适配器中
private BaseRecyclerAdapter<String, CourtDetailsTimeViewHolder> mBaseRecyclerAdapter = new BaseRecyclerAdapter<String, CourtDetailsTimeViewHolder>(CourtDetailsTimeViewHolder.class, R.layout.item_court_details_availability_time) {
@Override
protected void populateViewHolder(CourtDetailsTimeViewHolder viewHolder, SessionModel model, int position) {
viewHolder.mCheckBox.setOnCheckedChangeListener(null);
viewHolder.mCheckBox.setText(model.getgetSessionFrom+"-"+model.getSessionTo);
viewHolder.mCheckBox.setChecked(getChecked(model));
if (model.get(i).isSessionFound()) {
viewHolder.mCheckBox.setEnabled(false);
viewHolder.mCheckBox.setBackgroundResource(R.drawable.slctr_bg_cb_challenges_details_disable);
} else {
viewHolder.mCheckBox.setEnabled(true);
viewHolder.mCheckBox.setBackgroundResource(R.drawable.slctr_bg_cb_challenges_details);
}
}
};