我有一个带有自定义`ArrayAdapter的ListView
,我有时会更新这些值。
一切正常,但在第一次更新时它就变空了。
我的数组适配器:
protected class ResultArrayAdapter extends ArrayAdapter<JsonObject> {
private ArrayList<JsonObject> values;
protected ResultArrayAdapter(ArrayList<JsonObject> values) {
super(context, R.layout.content_result_item, values);
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) { ... }
public void updateValues(ArrayList<JsonObject> values) {
//here values.size() > 0 and everything OK
this.clear();
//here values.size() == 0, why??
for (JsonObject value : values) {
this.add(value);
}
this.notifyDataSetChanged();
}
}
当我更新我的值时,我调用updateValues()
并在调用this.clear()
后,此方法的参数ArrayList<JsonObject> values
也为空。因此,在此之后,this.add(value)
无法添加任何值,但只能在第一次onUpdate()
之后添加。
同样重命名ArrayList<JsonObject> values
参数,或将其保存在另一个参数中也无济于事。
答案 0 :(得分:1)
试试这个:
@Override
public View getView(int position, View convertView, ViewGroup parent) { ... }
public void updateValues(ArrayList<JsonObject> newValues) {
//here values.size() > 0 and everything OK
values.clear();
//here values.size() == 0, why??
for (JsonObject value : newValues) {
values.add(value );
}
this.notifyDataSetChanged();
}
答案 1 :(得分:1)
您似乎正在使用构造函数设置ArrayList
的相同实例来更新值。你可以通过不从外部设置初始值来超越这个。此外,您实际上并不需要班上的values
成员。
protected class ResultArrayAdapter extends ArrayAdapter<JsonObject> {
protected ResultArrayAdapter(List<JsonObject> values) {
super(context, R.layout.content_result_item, new ArrayList<JsonObject>());
updateValues(values);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) { ... }
public void updateValues(List<JsonObject> values) {
this.clear();
this.addAll(values);
this.notifyDataSetChanged();
}
}
此外,您可以在for循环中使用addAll()
代替add()
并提供List
而不是ArrayList
。如果您愿意,甚至可以选择Collection
。
答案 2 :(得分:0)
问题是:如果我使用它更新了arrayadapter,我初始化为:
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<String, String> {
@Override
public String handleRequest(String input, Context context) // error is this hanleRequest it states Multiple markers at this line
- The method handleRequest(String, Context) of type LambdaFunctionHandler must override a superclass method
- implements {
context.getLogger().log("Input: " + input);
// TODO: implement your handler
return null;
}
}
}
所以ListView resultsView = (ListView)findViewById(R.id.results);
ResultArrayAdapter adapter = (ResultArrayAdapter)resultsView .getAdapter();
if(adapter == null){
adapter = new ResultArrayAdapter(MyActivity.this, values);
resultsView .setAdapter(adapter);
} else {
adapter.updateValues(values);
}
清除我的价值观。例如我使用值列表1初始化我的数组适配器,然后我更新值列表2,所以它更糟,但再次更新值列表1,它是空的。
我的工作模式是你的例子的混合,所以THX!
this.clear()