#java #android
#java #Android
Вопрос:
Я пытался использовать 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
Ответ №1:
Сначала вы сказали recyclerveiw, что количество элементов фиксировано mList.setHasFixedSize(true);
, но в методе getData вы добавили к нему элемент.
во-вторых, не вызывайте adapter.notifyDataSetChanged();
, когда вы только что добавили элемент, вместо этого вызывайте notifyItemInserted(position);
в-третьих, вы заменили адаптер после вызова adapter.notifyDataSetChanged();
, сначала замените адаптер, а затем вызовите adapter.notifyDataSetChanged();