[英]Refresh List View (Custom adapter)
如何实时更新列表视图数据? 它只会在重新创建时刷新(如果我完成活动并重新启动它)。 但否则它不会自动刷新。
adapter.notifydatasetchange();
根本不工作。 我尝试使用处理程序、按钮、列表项单击、选项菜单项单击、上下文菜单项单击,但我没有得到任何响应。 我认为这种方法行不通。
我的活动
String [] titles = {"List option 1","List option 2","List option 3"};
String [] descriptions = {updateDescription1(),updateDescription2(),updateDescription3()};
ListView lv;
public String updateDescription() {
//live clock!!!!!!!!!!
long time = System.currentTimeMillis();
@SuppressLint("SimpleDateFormat") SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm");
return sdf2.format(time);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view);
lv = (ListView) findViewById(R.id.listView);
final UserAdapter adapter = new UserAdapter(getApplicationContext(), titles, descriptions);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
});
}
我的适配器类
class UserAdapter extends ArrayAdapter {
String[] titleArray;
String[] descriptionArray;
public UserAdapter(Context context, String[] titles1, String [] description1) {
super(context, R.layout.no_icon_list_row, R.id.noIconListDescriptions, titles1);
this.titleArray = titles1;
this.descriptionArray = description1;
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.no_icon_list_row,parent,false);
TextView myTitle = (TextView) row.findViewById(R.id.noIconListTitles);
TextView myDescription = (TextView) row.findViewById(R.id.noIconListDescriptions);
myTitle.setText(titleArray[position]);
myDescription.setText(descriptionArray[position]);
return row;
}
}
现在,我无法更新描述文本; 我怎样才能实时更新它们?
public View getView(int position, View convertView, ViewGroup parent) {
View row = inflater.inflate(R.layout.no_icon_list_row,parent,false);
return row;
}
}
不对。您可以在下面修改:
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = inflater.inflate(R.layout.no_icon_list_row,parent,false);
}
TextView myTitle = (TextView) convertView.findViewById (R.id.noIconListTitles);
return convertView,
}
最后的。 如果您想刷新数据,只需调用adapter.notifyDataSetChanged
希望对您有所帮助。
您可以在以下数组中添加数据并在列表视图上调用 notifyDataSetChanged 方法
String [] titles = {"List option 1","List option 2","List option 3" , "List option 4" , "List option 5"};
String [] descriptions = {updateDescription1(),updateDescription2(),updateDescription3() , updateDescription4() , updateDescription5()};
adapter.notifyDataSetChanged();
public String updateDescription() {
//my update text data method
adapter.notifyDataSetChanged();
return text;
}
这将通知您的数据已更改并将绘制所有项目。
我建议使用 recyclerview,因为您可以在那里指定已更改的项目,并且只有该项目将被重绘(重新绑定)。 使用notifyItemChanged(position)
您需要告诉您的适配器您进行了更改。 执行更新逻辑后,在适配器上调用此方法
adapter.notifyDataSetChanged()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.