![](/img/trans.png)
[英]Update ArrayList for RecyclerView.Adapter from RecyclerView.ViewHolder?
[英]Volley callback to return a ArrayList and then send it to a RecyclerView.Adapter
我有一个用于RecyclerView
的Adapter
,我的Adapter
期望两个参数一个是Context
,第二个是ArrayList
。
我的MainActivity
上的ArrayList
看起来像这样。 当方法onSucces完成时,我无法返回ArrayList。
ArrayList<Doc> docs = new ArrayList<> ();
public ArrayList<Doc> getDocumentFromServer() {
GetDocsFromServer.getAllDocs(getActivity(), new GetDocsFromServer.VolleyCallBackDocs(){
@Override
public void onSuccess(ArrayList<String> documentos) {
docs = new ArrayList<> ();
for (int i = 0; i < documentos.size(); i++) {
Doc item = new Doc ();
item.setTittle("list item" + i);
item.setDescription("DESCRIPTION");
item.setPosition (i);
docs.add(item);
}
}
@Override
public void onFail(String msg) {
}
});
return docs;
}
当我在onCreateView
(这是一个Fragment
)上声明MyAdapter
时,似乎是这样的。
MyAdapter adapter = new MyAdapter(getActivity(), getDocumentFromServer());
现在,我使用Volley
从数据库中获取所有数据,并将所有这些信息设置为ArrayList
public class GetOficiosFromServer{
public static void getAllWorks(final Context context, final VolleyCallBack callBack) {
RequestQueue rq = Volley.newRequestQueue(context);
StringRequest strReq = new StringRequest(Request.Method.GET, AppConfig.URL_GET_WORKS, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONArray jsonArray = new JSONArray(response);
ArrayList<String> oficios = new ArrayList<>();
for(int i=0; i< jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String name = jsonObject.getString("nombre");
oficios.add(name);
}
callBack.onSuccess(oficios);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
rq.add(strReq);
}
public interface VolleyCallBack{
void onSuccess(ArrayList<String>oficios);
void onFail(String msg);
}
我如何将这个ArrayList<String>
传递给我的Adapter
。
用ArrayList<String>
作为参数编写一个构造函数。 像这样
public class MyAdapter extends ArrayAdapter<String>{
Context ctx;
ArrayList<Doc> docs;
ArrayList<String> officios;
public MyAdapter(Context c,ArrayList<Doc> documents, ArrayList<String> offs){
this.ctx = c;
this.docs = documents;
this.officios = offs
}
}
您可以在适配器初始化中传递ArrayList<String>
。
MyAdapter adapter = new MyAdapter(getActivity(), getDocumentFromServer(),<Your_array_list_here>);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.