Android 如何每秒更新RecyclerView中的文本?

Android 如何每秒更新RecyclerView中的文本?,android,android-recyclerview,Android,Android Recyclerview,我有一个RecyclerView,它显示ArrayList片段中的项目 项目有一个字符串,需要每秒更新一次 如何每秒更新所有ArrayList项目中的字符串,并在RecyclerView中立即显示更改 片段其中显示回收视图: public class RecyclerViewFragment extends Fragment{ DbActivity db; Cursor fullData; View v; ConstraintLayout addDeadli

我有一个RecyclerView,它显示ArrayList片段中的项目

项目有一个字符串,需要每秒更新一次

如何每秒更新所有ArrayList项目中的字符串,并在RecyclerView中立即显示更改

片段其中显示回收视图

public class RecyclerViewFragment extends Fragment{

    DbActivity db;
    Cursor fullData;

    View v;

    ConstraintLayout addDeadline;
    CardView empty;

    RecyclerView recyclerView;
    List<Deadline> deadlines;
    DeadlineAdapter deadlineAdapter;

    String id, summary, date, time, deadline, labels;

    public RecyclerViewFragment() { // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        v = inflater.inflate(R.layout.fragment_recycler_view, container, false);

        setBasicView();
        addDeadline();

        return v;
    }

    public void setBasicView(){
        recyclerView = v.findViewById(R.id.recycler_view);
        empty = v.findViewById(R.id.empty);

        db = new DbActivity(getContext());
        fullData = db.getAllData();
        if (fullData.getCount() > 0){
            if (fullData.moveToFirst()) {
                deadlines = new ArrayList<>();
                int i = 1;
                do {
                    String check = fullData.getString(5);
                    if (!check.startsWith("co")){
                        id = fullData.getString(1);
                        summary = fullData.getString(2);
                        date = fullData.getString(3);
                        time = fullData.getString(4);
                        deadline = fullData.getString(5);
                        labels = fullData.getString(6);
                        deadlines.add(new Deadline(id, summary, date, time, deadline,
                                labels));
                        i++;
                    }
                } while (fullData.moveToNext());
            }
            empty.setVisibility(View.GONE);
            recyclerView.setVisibility(View.VISIBLE);
        }
        else {
            deadlines = new ArrayList<>();
            recyclerView.setVisibility(View.GONE);
            empty.setVisibility(View.VISIBLE);
        }
        deadlineAdapter = new DeadlineAdapter(getContext(), deadlines);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        recyclerView.setAdapter(deadlineAdapter);
    }

    public void addDeadline(){
        addDeadline = v.findViewById(R.id.add_deadline);
        addDeadline.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(getContext(), AddDeadlineActivity.class);
                startActivityForResult(intent, Codes.INTENT_REQUEST_CODE);
            }
        });
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
                mMessageReceiver,
                new IntentFilter("AddDeadline"));
    }

    private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            empty.setVisibility(View.GONE);
            DbActivity db = new DbActivity(getContext());
            Cursor newDeadline = db.getAllData();
            int position = intent.getIntExtra("position", -1);
            try {
                if (position != -1){
                    newDeadline.moveToPosition(position);
                    id = newDeadline.getString(1);
                    summary = newDeadline.getString(2);
                    date = newDeadline.getString(3);
                    time = newDeadline.getString(4);
                    deadline = newDeadline.getString(5);
                    labels = newDeadline.getString(6);
                    deadlines.remove(position);
                    deadlines.add(position, new Deadline(String.valueOf(position), summary, date, time, deadline, labels));
                }
                else {
                    newDeadline.moveToLast();
                    id = newDeadline.getString(1);
                    summary = newDeadline.getString(2);
                    date = newDeadline.getString(3);
                    time = newDeadline.getString(4);
                    deadline = newDeadline.getString(5);
                    labels = newDeadline.getString(6);
                    deadlines.add(new Deadline(id, summary, date, time, deadline, labels));
                }
            }
            catch (NullPointerException e){
                newDeadline.moveToLast();
            }
            deadlineAdapter.notifyDataSetChanged();
            recyclerView.setVisibility(View.VISIBLE);
        }
    };

    @Override
    public void onDestroy() {
        // Unregister since the activity is about to be closed.
        LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(mMessageReceiver);
        super.onDestroy();
    }

}
公共类RecycleServicewFragment扩展片段{
动态数据库;
光标数据;
观点五;
限制你的最后期限;
卡德维尤空;
回收视图回收视图;
列出截止日期;
死线适配器死线适配器;
字符串id、摘要、日期、时间、截止日期、标签;
public RecycleServicewFragment(){//需要空的公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
v=充气机。充气(R.布局.碎片\回收器\视图,容器,假);
setBasicView();
添加截止日期();
返回v;
}
公共空间(Asbicview)(){
recyclerView=v.findViewById(R.id.recycler\u视图);
empty=v.findviewbyd(R.id.empty);
db=新的DbActivity(getContext());
fullData=db.getAllData();
if(fullData.getCount()>0){
if(fullData.moveToFirst()){
截止日期=新的ArrayList();
int i=1;
做{
字符串检查=fullData.getString(5);
如果(!check.startsWith(“co”)){
id=fullData.getString(1);
summary=fullData.getString(2);
date=fullData.getString(3);
time=fullData.getString(4);
截止日期=fullData.getString(5);
labels=fullData.getString(6);
截止日期。添加新的截止日期(id、摘要、日期、时间、截止日期、,
标签),;
i++;
}
}while(fullData.moveToNext());
}
empty.setVisibility(View.GONE);
recyclerView.setVisibility(View.VISIBLE);
}
否则{
截止日期=新的ArrayList();
recyclerView.setVisibility(View.GONE);
empty.setVisibility(View.VISIBLE);
}
deadlineAdapter=新的deadlineAdapter(getContext(),deadlineAdapter);
setLayoutManager(新的LinearLayoutManager(getContext());
recyclerView.setAdapter(死线适配器);
}
公众假期截止日期(){
addDeadline=v.findViewById(R.id.add_deadline);
addDeadline.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意图=新意图();
setClass(getContext(),AddDeadlineActivity.class);
startActivityForResult(意图、代码、意图请求代码);
}
});
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
接受者夫人,
新意向过滤器(“添加截止日期”);
}
private BroadcastReceiver mMessageReceiver=新的BroadcastReceiver(){
@凌驾
公共void onReceive(上下文、意图){
empty.setVisibility(View.GONE);
DbActivity db=新的DbActivity(getContext());
Cursor newDeadline=db.getAllData();
int position=intent.getIntExtra(“position”,-1);
试一试{
如果(位置!=-1){
新截止日期。移动位置(位置);
id=newDeadline.getString(1);
summary=newDeadline.getString(2);
date=newDeadline.getString(3);
time=newDeadline.getString(4);
deadline=newDeadline.getString(5);
labels=newDeadline.getString(6);
最后期限。移除(位置);
添加(位置,新的截止日期(String.valueOf(位置),摘要,日期,时间,截止日期,标签));
}
否则{
newDeadline.moveToLast();
id=newDeadline.getString(1);
summary=newDeadline.getString(2);
date=newDeadline.getString(3);
time=newDeadline.getString(4);
deadline=newDeadline.getString(5);
labels=newDeadline.getString(6);
添加(新的截止日期(id、摘要、日期、时间、截止日期、标签));
}
}
捕获(NullPointerException e){
newDeadline.moveToLast();
}
deadlineAdapter.notifyDataSetChanged();
recyclerView.setVisibility(View.VISIBLE);
}
};
@凌驾
公共空间{
//取消注册,因为活动即将关闭。
LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(mMessageReceiver);
super.ondestory();
}
}
自定义适配器

public class DeadlineAdapter extends RecyclerView.Adapter<DeadlineAdapter.mViewHolder> {

    Context context;
    List<Deadline> deadlines;

    public DeadlineAdapter(Context context, List<Deadline> deadlines) {
        this.context = context;
        this.deadlines = deadlines;
    }

    @Override
    public mViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new mViewHolder(LayoutInflater.from(context).inflate(R.layout.recycler_view_item, parent, false));
    }

    @Override
    public void onBindViewHolder(final mViewHolder holder, int position) {

        holder.summary.setText(deadlines.get(position).getSummary());
        holder.deadline.setText(deadlines.get(position).getDeadline());
        holder.labels.setText(String.valueOf(deadlines.get(position).getLabels()));

        holder.setItemClickListener(new ItemClickListener() {
            @Override
            public void onClick(View view, int position, boolean isLongClick) {
                editDeadline(position);
            }
        });
    }

    private void editDeadline(int position) {
        Intent intent = new Intent(context, AddDeadlineActivity.class);
        intent.putExtra("id", deadlines.get(position).getId());
        intent.putExtra("summary", deadlines.get(position).getSummary());
        intent.putExtra("date", deadlines.get(position).getDate());
        intent.putExtra("time", deadlines.get(position).getTime());
        intent.putExtra("labels", deadlines.get(position).getLabels());
        intent.putExtra("position", position);
        context.startActivity(intent);
    }

    @Override
    public int getItemCount() {
        return deadlines.size();
    }

    public static class mViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {

        private ItemClickListener itemClickListener;

        private TextView summary;
        private TextView deadline;
        private TextView labels;

        public mViewHolder(View itemView) {
            super(itemView);

            summary = itemView.findViewById(R.id.customSummary);
            deadline = itemView.findViewById(R.id.customDeadline);
            labels = itemView.findViewById(R.id.customLabels);

            itemView.setOnClickListener(this);
            itemView.setOnLongClickListener(this);

        }

        public void setItemClickListener(ItemClickListener itemClickListener){
            this.itemClickListener = itemClickListener;
        }

        @Override
        public void onClick(View v) {
            itemClickListener.onClick(v, getAdapterPosition(), false);
        }

        @Override
        public boolean onLongClick(View v) {
            itemClickListener.onClick(v, getAdapterPosition(), true);
            return true;
        }

    }
}
公共类死线适配器扩展了RecyclerView.Adapter{
语境;
列出截止日期;
公共死线适配器(上下文、列表截止日期){
this.context=上下文;
这个。截止日期=截止日期;
}
@凌驾
public mViewHolder onCreateViewHolder(视图组父级,int-viewType){
返回新的mViewHolder(LayoutInflater.from(context).充气(R.layout.recycler\u view\u item,parent,false));
}
@凌驾
BindViewHolder上的公共无效(最终mViewHolder holder,int posi
public void timer() {
    String stringToChange;
    for(int i = 0; i < yourList.size(); i++) {
        //change data depending on time

        //set new data to the deadline field
        yourList.get(i).setData(stringToChange);
        notifyDataSetChanged();
    }
}
public void setHandler(){
    final Handler handler = new Handler();
    final int delay = 1000 ; //1000 milliseconds = 1 sec

    handler.postDelayed(new Runnable(){
        public void run(){
            customAdapter.timer(); // call our adapter method here
            handler.postDelayed(this, delay);
        }
    }, delay);
}
setHandler();