Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中自动更新RecyclerView.Adapter?_Android_Android Recyclerview_Adapter - Fatal编程技术网

如何在android中自动更新RecyclerView.Adapter?

如何在android中自动更新RecyclerView.Adapter?,android,android-recyclerview,adapter,Android,Android Recyclerview,Adapter,这是我的代码: public class ItemsListActivity extends AppCompatActivity { private List<AllItems> listItems; private RecyclerView recyclerView; private RecyclerView.LayoutManager layoutManager; private RecyclerView.Adapter adapter;

这是我的代码:

public class ItemsListActivity extends AppCompatActivity {

    private List<AllItems> listItems;
    private RecyclerView recyclerView;
    private RecyclerView.LayoutManager layoutManager;
    private RecyclerView.Adapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_items_list);

        Button camera=(Button)findViewById(R.id.camera);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        listItems = new ArrayList<>();
        camera.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(ItemsListActivity.this, Camera.class);
                startActivity(i);
            }
        });

        getData();
    }

    private void getData(){
        final ProgressDialog loading = ProgressDialog.show(this,"Loading Data", "Please wait...",false,false);
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Config.DATA_URL,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        loading.dismiss();
                        parseData(response);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(jsonArrayRequest);
    }

    private void parseData(JSONArray array){
        for(int i = 0; i<array.length(); i++) {
            AllItems items = new AllItems();
            JSONObject json = null;
            try {
                json = array.getJSONObject(i);
                items.setImageUrl(json.getString(Config.TAG_IMAGE_URL));
                items.setName(json.getString(Config.TAG_NAME));

            } catch (JSONException e) {
                e.printStackTrace();
            }
            listItems.add(items);
        }

        adapter = new CardAdapter(listItems, this);
        recyclerView.setAdapter(adapter);

        adapter.notifyItemRangeChanged(0, listItems.size());
    }
}
public类ItemsListActivity扩展了AppCompativity{
私人物品清单;
私人回收站;
private RecyclerView.LayoutManager LayoutManager;
专用循环视图适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u items\u list);
按钮摄像头=(按钮)findViewById(R.id.camera);
recyclerView=(recyclerView)findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
layoutManager=新的LinearLayoutManager(此);
recyclerView.setLayoutManager(layoutManager);
listItems=new ArrayList();
camera.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意图i=新意图(ItemsListActivity.this,Camera.class);
星触觉(i);
}
});
getData();
}
私有void getData(){
final ProgressDialog loading=ProgressDialog.show(这是“正在加载数据”,“请稍候…”,false,false);
JsonArrayRequest JsonArrayRequest=新的JsonArrayRequest(Config.DATA\u URL,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
loading.dispose();
解析数据(响应);
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
});
RequestQueue RequestQueue=Volley.newRequestQueue(this);
add(jsonArrayRequest);
}
私有void parseData(JSONArray数组){

对于(int i=0;i您每次解析数据时都在创建适配器的实例, 只需在onCreate()方法中创建一次其实例,如下所示:

layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
listItems = new ArrayList<>();
adapter = new CardAdapter(listItems, this);
recyclerView.setAdapter(adapter);
listItems.add(items);
adapter.notifyDataSetChanged();

将为您工作。

每次解析数据时,您都在创建适配器的实例, 只需在onCreate()方法中创建一次其实例,如下所示:

layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
listItems = new ArrayList<>();
adapter = new CardAdapter(listItems, this);
recyclerView.setAdapter(adapter);
listItems.add(items);
adapter.notifyDataSetChanged();

将对您起作用。

在这里,每次调用getData()时,您都会再次初始化适配器。相反,您应该在onCreate中初始化适配器,而在getData中只需更新传入适配器的列表并调用adapter.notifyDataSetChanged()

私有列表项;
private RecyclerView RecyclerView;private RecyclerView.LayoutManager LayoutManager;
私有RecycleView.Adapter适配器;@Override protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_items_list);Button camera=(Button)findViewById(R.id.camera);RecycleView=(RecyclerView)findViewById(R.id.RecycleView);RecyclerView.setHasFixedSize(true);layoutManager=new LinearLayoutManager(this);recyclerView.setLayoutManager(layoutManager);listItems=new ArrayList();
适配器=新卡适配器(列表项,此项);
recyclerView.setAdapter(适配器);
camera.setOnClickListener(新视图.OnClickListener(){@Override public void onClick(视图){Intent i=new Intent(itemsListativity.this,camera.class);startActivity(i);}};getData();}
私有void getData(){
final ProgressDialog loading=ProgressDialog.show(这是“正在加载数据”,“请稍候…”,false,false);
JsonArrayRequest JsonArrayRequest=新JsonArrayRequest(Config.DATA_URL,new Response.Listener(){@Override public void onResponse(JSONArray Response){loading.disease();parseData(Response);}
},新的响应。ErrorListener(){
@重写public void onErrorResponse(VolleyError error){};RequestQueue RequestQueue=Volley.newRequestQueue(this);RequestQueue.add(jsonArrayRequest);}
私有void parseData(JSONArray数组){

对于(int i=0;i这里发生的情况是,每次调用getData()时,您都在再次初始化适配器。相反,您应该在onCreate中初始化适配器,而在getData中只需更新传入适配器的列表并调用adapter.notifyDataSetChanged()

私有列表项;
private RecyclerView RecyclerView;private RecyclerView.LayoutManager LayoutManager;
私有RecycleView.Adapter适配器;@Override protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_items_list);Button camera=(Button)findViewById(R.id.camera);RecycleView=(RecyclerView)findViewById(R.id.RecycleView);RecyclerView.setHasFixedSize(true);layoutManager=new LinearLayoutManager(this);recyclerView.setLayoutManager(layoutManager);listItems=new ArrayList();
适配器=新卡适配器(列表项,此项);
recyclerView.setAdapter(适配器);
camera.setOnClickListener(新视图.OnClickListener(){@Override public void onClick(视图){Intent i=new Intent(itemsListativity.this,camera.class);startActivity(i);}};getData();}
私有void getData(){
final ProgressDialog loading=ProgressDialog.show(这是“正在加载数据”,“请稍候…”,false,false);
JsonArrayRequest JsonArrayRequest=新JsonArrayRequest(Config.DATA_URL,new Response.Listener(){@Override public void onResponse(JSONArray Response){loading.disease();parseData(Response);}
},新的响应。ErrorListener(){
@重写public void onErrorResponse(VolleyError error){};RequestQueue RequestQueue=Volley.newRequestQueue(this);RequestQueue.add(jsonArrayRequest);}
私有void parseData(JSONArray数组){

对于(int i=0;i)您已经在重置适配器并发出通知。哪些不起作用?您已经在重置适配器并发出通知。哪些不起作用?