Android 更改数据后如何刷新recyclerView
我正在开发一个包含(recyclerView)显示成员响应的应用程序。在成员发布新评论后,我遇到了一个问题(recyclerView)没有实时更新。 在输入新数据后,如果用户不退出或关闭应用程序,我如何更新数据(recyclerView)Android 更改数据后如何刷新recyclerView,android,android-recyclerview,Android,Android Recyclerview,我正在开发一个包含(recyclerView)显示成员响应的应用程序。在成员发布新评论后,我遇到了一个问题(recyclerView)没有实时更新。 在输入新数据后,如果用户不退出或关闭应用程序,我如何更新数据(recyclerView) public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{ private List<List_Data>list_data;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{
private List<List_Data>list_data;
public MyAdapter(List<List_Data> list_data) {
this.list_data = list_data;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.list_data,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
List_Data listData=list_data.get(position);
holder.txtname.setText(listData.gettext());
holder.txtmovie.setText(listData.getmovie_id());
}
@Override
public int getItemCount() {
return list_data.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
private TextView txtname,txtmovie,ImageView;
public ViewHolder(View itemView) {
super(itemView);
txtname=(TextView)itemView.findViewById(R.id.txt_name);
txtmovie=(TextView)itemView.findViewById(R.id.txt_moviename);
}
}
}
公共类MyAdapter扩展了RecyclerView.Adapter{
私有列表数据;
公共MyAdapter(列表\u数据){
this.list\u data=list\u data;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View=LayoutFlater.from(parent.getContext()).flate(R.layout.list_data,parent,false);
返回新的ViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
List\U Data listData=List\U Data.get(位置);
holder.txtname.setText(listData.gettext());
holder.txtmovie.setText(listData.getmovie_id());
}
@凌驾
public int getItemCount(){
返回列表_data.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图txtname、txtmovie、ImageView;
公共视图持有者(视图项视图){
超级(项目视图);
txtname=(TextView)itemView.findViewById(R.id.txt\u name);
txtmovie=(TextView)itemView.findViewById(R.id.txt_moviename);
}
}
}
公共类StatusFragment扩展了片段{
按钮btn\u发送\u评论;
编辑文本ETXT_评论;
字符串id;
私人名单;
私人废物回收站;
专用MyAdapter适配器;
ImageView btn_添加注释;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
设置选项菜单(真);
视图根视图=充气机。充气(R.layout.status,container,false);
ETXT_comment=(EditText)rootView.findviewbyd(R.id.ETXT_comment);
btn_add_comments=(ImageView)rootView.findviewbyd(R.id.btn_add_comments);
btn_send_comment=(按钮)rootView.findviewbyd(R.id.btn_send_comment);
Intent i=getActivity().getIntent();
最终字符串电影_id=i.getStringExtra(“id”);
rvy=(RecyclerView)rootView.findviewbyd(R.id.RecyclerView);
rvy.setHasFixedSize(真实);
rvy.setLayoutManager(新的LinearLayoutManager(getActivity().getApplicationContext());
列表=新的ArrayList();
适配器=新的MyAdapter(列表);
getComment(电影id);
//----------------发送命令
btn_send_comment.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
最后一个字符串comment_text=ETXT_comment.getText().toString().trim();
如果(注释文本等于(“”)){
}否则{
//
最终字符串寄存器\u URL=”http://0000000/Comment.php";
StringRequest StringRequest=新建StringRequest(Request.Method.POST,REGISTER\u URL,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
//getComment(电影id);
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Toast.makeText(getActivity().getApplicationContext(),error.toString(),Toast.LENGTH_LONG).show();
}
}) {
@凌驾
受保护的映射getParams(){
Map params=新的HashMap();
参数put(“id”,id);
参数put(“注释”,注释文本);
返回参数;
}
};
RequestQueue RequestQueue=(RequestQueue)Volley.newRequestQueue(getActivity().getApplicationContext());
添加(stringRequest);
}
}
});
//--------------------
返回rootView;
}
@凌驾
已创建视图上的公共void(视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
}
私有void getComment(字符串id){
最终字符串HI=”http://0000000/Cm.php?id=“+id;
StringRequest StringRequest=新建StringRequest(Request.Method.GET,HI,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
试一试{
JSONObject JSONObject=新JSONObject(响应);
JSONArray数组=jsonObject.getJSONArray(“info”);
对于(int i=0;i您是否尝试在列表中添加新注释,然后调用该语句
adapter.notifyDataSetChanged()
- 将
rvy.setAdapter(适配器)
从getComment()
移动到onViewCreated()
- 清除
getComment()
方法开头的列表,添加以下行:
list.clear()
在代码中,在调用.add()时将相同的项追加到此列表实例中,因此会出现重复的元素
- 在list.add(listD)之后,调用adapter.notifyDataSetChanged()
当您返回新注释时,您没有添加带有新注释的RecyclerView
适配器列表。您所做的只是使用新注释更新片段列表,而适配器不知道此列表更新
因此,修改适配器以接受新的注释方法,并使用notifyItemInserted()
,仅使用新插入的行更新列表:
最后,不要忘记取消注释g的用法
adapter.notifyDataSetChanged()
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{
private List<List_Data>list_data;
public MyAdapter(List<List_Data> list_data) {
this.list_data = list_data;
}
public addComment(List_Data comment) {
this.list_data.add(comment);
notifyItemInserted(list_data.size() - 1); // Updating adapter list
}
// ... rest of code
}
private void getComment(String id){
final String HI ="http://0000000/Cm.php?id=" + id ;
StringRequest stringRequest=new StringRequest(Request.Method.GET, HI, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject=new JSONObject(response);
JSONArray array=jsonObject.getJSONArray("info");
for (int i=0; i<array.length(); i++ ){
JSONObject ob=array.getJSONObject(i);
List_Data listD = new List_Data(ob.getString("comment")
,ob.getString("name"));
list.add(listD);
adapter.addComment(listD); // <<<<<<<<<<<<<<<< Updating adapter list
// rv.removeAllViews();
}
rvy.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
RequestQueue requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
requestQueue.add(stringRequest);
}