[英]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.