Android 如何每秒更新RecyclerView中的文本?
我有一个RecyclerView,它显示ArrayList片段中的项目 项目有一个字符串,需要每秒更新一次 如何每秒更新所有ArrayList项目中的字符串,并在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
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();