繁体   English   中英

如何将我在EditText中输入的数据插入到数据库中并显示在recyclerview上而不像ajax那样刷新它?

[英]how do I make the data I input in the EditText inserted into the database and appear on the recyclerview without refreshing it like ajax?

我尝试使用adapter.notifyDataSetChanged()但失败了,也许有人可以告诉我代码的放置位置。

这是我的MainActivity:

private RecyclerView mList;
    private LinearLayoutManager linearLayoutManager;
    private DividerItemDecoration dividerItemDecoration;
    private Adapter mExampleAdapter;
    private ArrayList<Model> mExampleList;
    private RecyclerView.Adapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        modelList = new ArrayList<>();
        pesan= (EditText) findViewById(R.id.pesan);
        user= 1;
        admin= 1;
        save = (ImageButton) findViewById(R.id.btn_submit);
        mList = findViewById(R.id.main_list);
        modelList = new ArrayList<>();
        adapter = new Adapter(getApplicationContext(),modelList);

        linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        dividerItemDecoration = new DividerItemDecoration(mList.getContext(), linearLayoutManager.getOrientation());

        mList.setHasFixedSize(true);
        mList.setLayoutManager(linearLayoutManager);

        mList.setAdapter(adapter);

        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String isi_pesan = pesan.getText().toString();
                final String id_admin = admin.toString();
                final String id_user = user.toString();

                RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
                StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        pesan.setText("");

                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                        Toast.makeText(MainActivity.this, "my error :"+error, Toast.LENGTH_LONG).show();
                        Log.i("My error",""+error);
                    }
                }){
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {

                        Map<String,String> map = new HashMap<String, String>();
                        map.put("message",isi_pesan);
                        map.put("id_admin",id_admin);
                        map.put("id_user",id_user);
                        return map;
                    }
                };
                queue.add(request);


            }
        });

        getData();
    }


    private void getData() {
        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("Loading...");
        progressDialog.show();

        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                for (int i = 0; i < response.length(); i++) {
                    try {
                        JSONObject jsonObject = response.getJSONObject(i);

                        Model model = new Model();
                        model.setPesan(jsonObject.getString("isi_pesan"));
                        model.setAdmin(jsonObject.getString("sender"));

                        modelList.add(model);
                        adapter.notifyDataSetChanged();
                        mExampleAdapter = new Adapter(MainActivity.this, modelList);
                        mList.setAdapter(mExampleAdapter);

                    } catch (JSONException e) {
                        e.printStackTrace();
                        progressDialog.dismiss();
                    }
                }

                progressDialog.dismiss();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("Volley", error.toString());
                progressDialog.dismiss();
            }
        });
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(jsonArrayRequest);
    }

}

我希望我发布的数据像whatsapp一样实时显示

首先你告诉recyclerveiw项目的数量是固定的mList.setHasFixedSize(true); 但是在getData方法中你添加了一个项目。

第二,不要调用adapter.notifyDataSetChanged(); 当你刚刚添加一个项目时,而是调用notifyItemInserted(position);

第三,你在调用adapter.notifyDataSetChanged();之后更换了适配器adapter.notifyDataSetChanged(); ,首先替换适配器然后调用adapter.notifyDataSetChanged();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM