输入数据后,我不会使用基本适配器实现自定义列表视图,我的列表不会自动刷新。我需要重新打开片段以查看更新。
public class Lead_Adapter extends BaseAdapter {
private Context context;
private ArrayList<Lead_Model> leadarrayList;
public Lead_Adapter(Context context,ArrayList<Lead_Model>arrayList){
this.context = context;
this.leadarrayList = arrayList;
}
@Override
public int getCount() {
return this.leadarrayList.size();
}
@Override
public Object getItem(int position) {
return leadarrayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convert_view, ViewGroup parent) {
LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convert_view = layoutInflater.inflate(R.layout.lead_listview, null);
TextView Company_Name = convert_view.findViewById(R.id.company_name_listview);
TextView Lead_Status = convert_view.findViewById(R.id.lead_status_listview);
TextView Lead_Date = convert_view.findViewById(R.id.lead_date_listview);
Lead_Model leadModel = leadarrayList.get(position);
Company_Name.setText(leadModel.getCompany_name());
Lead_Status.setText(leadModel.getLead_status());
Lead_Date.setText(leadModel.getDate());
return convert_view;
}
将数据添加到片段中的适配器后,请执行以下操作
adapter.notifyDataSetChanged();
完成数据添加后,您可以致电notifyDataSetChanged()。
当您将片段添加到arrayList中的项目时,您必须执行adapter.notifyDataSetChanged()
输入数据后,只需通知列表,无需重新打开片段。
items.clear();
items = db.getItems(); // fetch items from database
listAdapter.notifyDataSetChanged();
有两种解决方案,最简单的方法是处理程序:
final Handler handler = new Handler();
Runnable refresh = new Runnable() {
@Override
public void run() {
new JSONParse().execute();
handler.postDelayed(this, 60 * 1000);
}
};
handler.postDelayed(refresh, 60 * 1000);
此处理程序每分钟刷新一次数据。
第二种方法正在使用livedata:
https://medium.com/@taman.neupane/basic-example-of-livedata-and-viewmodel-14d5af922d0
希望有用
使用处理程序及其postDelayed方法使列表的适配器无效,如下所示:
final Handler handler = new Handler() handler.postDelayed( new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
handler.postDelayed( this, 60 * 1000 );
} }, 60 * 1000 );
此处理程序每分钟刷新一次数据。