我有一个从API调用填充的微调器。 在第一次加载片段时,列表被正确填充,具有不同的项目,一行用于行。 提交后(我需要在此片段中提交),列表会重新填充几次。
这是 onCreate 方法:
@Override
public void onCreate(Bundle savedInstanceState) {
mItemSubscriptionList = new ArrayList<>();
super.onCreate(savedInstanceState);
}
这是填充数组列表的方法
private void loadItemSubscription() {
ApiMapper mapper = new ApiMapper();
mapper.getBalance(new ApiMapper.VolleyCallback<JSONArray>() {
@Override
public void onSuccess(JSONArray balance) {
if (balance != null) {
Log.d(LOGTAG , balance.toString());
mItemSubscriptionList.clear();
for (int i = 0; i < balance.length(); i++) {
Log.d(LOGTAG , "Popolo lo spinner "+i);
try {
JSONObject obj = balance.getJSONObject(i);
String quantity = obj.getString("balance");
quantity = quantity.replace(".00","");
int id_item = obj.getInt("id_item");
String item = obj.getString("item");
item = item + ' '+'('+quantity+')';
Log.d(LOGTAG , quantity);
Log.d(LOGTAG , item);
ModelItemSubscription modelItemSubscription = new ModelItemSubscription();
modelItemSubscription.setMItemId(id_item);
modelItemSubscription.setMItemName(item);
modelItemSubscription.setMItemQuantity(quantity);
mItemSubscriptionList.add(modelItemSubscription);
mBaseApp.setItemSubscription(modelItemSubscription);
mLoadingDialog.dismiss();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
mItemSubscriptionList = mBaseApp.getItemSubscription();
if ( mItemSubscriptionList!=null ) {
renderSpinnerItemSubscription(mItemSubscriptionList);
}
}
}, mToken, mIdMemberCard, mIdCampaign);
}
在实际情况中,我有4个要填充的项目。 Log “Popolo lo spinner” 正好打印4次,但这是丑陋的最终结果。
相反,这是第一次加载后的正确行为(类型只有1项)
Fyi这是填充的数组:
[{ “平衡”: “0.00”, “项目”: “Lampada”, “id_item”: “540”},{ “平衡”: “0.00”, “项目”: “塔格奥”, “id_item” : “541”},{ “平衡”: “1.00”, “项目”: “Piega”, “id_item”: “542”},{ “平衡”: “11.00”, “项目”: “格拉特”,” id_item “:” 543" }]
非常感谢
答案 0 :(得分:0)
代码的问题是每次进行API调用时都会填充列表。意味着如果进行了4次调用,那么您的列表将使用相同的数据填充4次。
mItemSubscriptionList.add(modelItemSubscription);
不会覆盖但会添加项目,无论项目是否已存在于列表中。
现在我建议您在调用API之前清除列表。只需在mItemSubscriptionList.clear()
ApiMapper mapper = new ApiMapper();
即可
答案 1 :(得分:0)
我无法看到您填充Spinner
适配器的位置,因此我将描述如何在没有代码的情况下完成此操作。
首先,每当您从API
获取数据时,您应该清除保存数据的主ArrayList
并更新Spinner
适配器:
adapter.notifySetDataChanged(); // Depending on the adapter
之后使用新获取的数据填充ArrayList
并调用
adapter.notifySetDataChanged();
再次,以便您的数据得到刷新。
试试这个并告诉它是否有效。如果没有,请添加更多代码,以便我们可以看到在获取数据后如何填充适配器。