Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.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_Android_Android Recyclerview - Fatal编程技术网

Android 更改数据后如何刷新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;

我正在开发一个包含(recyclerView)显示成员响应的应用程序。在成员发布新评论后,我遇到了一个问题(recyclerView)没有实时更新。 在输入新数据后,如果用户不退出或关闭应用程序,我如何更新数据(recyclerView)


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);


}