Android 刷新列表视图中的特定项
我试图在不刷新整个listview的情况下更新列表视图中的特定项(下面有详细说明)。对于这个要求,我放弃了几乎所有的在线想法,但我没有得到解决方案 说明: 我在列表视图中有不同的项目(见附图)。对于这个列表视图,我使用模型类(POJO类)存储id和其他相关数据。在同一个项目中,我使用推送通知。在这个推送通知中,我将获得列表视图中的项目id。根据id,我必须在列表视图中显示一些图像。对于这个要求,如果我刷新整个列表视图,我可以更改图像,但我不想刷新整个列表视图因此,我想根据从推送通知中获得的id更改列表视图中特定项目的图像 图像 示例代码(我正在使用休闲示例代码填充列表视图) 活动Android 刷新列表视图中的特定项,android,listview,listviewitem,partial-page-refresh,Android,Listview,Listviewitem,Partial Page Refresh,我试图在不刷新整个listview的情况下更新列表视图中的特定项(下面有详细说明)。对于这个要求,我放弃了几乎所有的在线想法,但我没有得到解决方案 说明: 我在列表视图中有不同的项目(见附图)。对于这个列表视图,我使用模型类(POJO类)存储id和其他相关数据。在同一个项目中,我使用推送通知。在这个推送通知中,我将获得列表视图中的项目id。根据id,我必须在列表视图中显示一些图像。对于这个要求,如果我刷新整个列表视图,我可以更改图像,但我不想刷新整个列表视图因此,我想根据从推送通知中获得的id更
您可以使用以下代码:
private void updateView(int index){
View v = yourListView.getChildAt(index -
yourListView.getFirstVisiblePosition());
if(v == null)
return;
// Views you want to change
TextView someText = (TextView) v.findViewById(R.id.sometextview);
someText.setText("UPDATE");
}
我努力实现这一目标,但正如我提到的,这是不可能实现的(截至目前)。所以,我做到了这一点 解释 当我收到推送通知时,我只需调用包含我的ListView值的API并维护ListView位置,如下面的代码所示。在此API调用期间,我没有显示任何进度对话框
Parcelable state;
@Override
public void onPause() {
// Save ListView state @ onPause
Log.d(TAG, "saving listview state @ onPause");
state = listView.onSaveInstanceState();
super.onPause();
}
...
@Override
public void onViewCreated(final View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// Set new items
listView.setAdapter(adapter);
...
// Restore previous state (including selected item index and scroll position)
if(state != null) {
Log.d(TAG, "trying to restore listview state..");
listView.onRestoreInstanceState(state);
}
}
请将此简化为一个简短但完整的示例来演示问题。不需要这么多代码
public class EventMyEventHostingItems {
private String eventID;
private String imageMyEvent;
private String isActive;
private String titleMyEvent;
private String timeMyEvent;
private String locationMyEvent;
private String interestedMyEvent;
public String getEventID() {
return eventID;
}
public void setEventID(String eventID) {
this.eventID = eventID;
}
public String getIsActive() {
return isActive;
}
public void setIsActive(String isActive) {
this.isActive = isActive;
}
public String getImageMyEvent() {
return imageMyEvent;
}
public void setImageMyEvent(String imageMyEvent) {
this.imageMyEvent = imageMyEvent;
}
public String getTitleMyEvent() {
return titleMyEvent;
}
public void setTitleMyEvent(String titleMyEvent) {
this.titleMyEvent = titleMyEvent;
}
public String getTimeMyEvent() {
return timeMyEvent;
}
public void setTimeMyEvent(String timeMyEvent) {
this.timeMyEvent = timeMyEvent;
}
public String getLocationMyEvent() {
return locationMyEvent;
}
public void setLocationMyEvent(String locationMyEvent) {
this.locationMyEvent = locationMyEvent;
}
public String getInterestedMyEvent() {
return interestedMyEvent;
}
public void setInterestedMyEvent(String interestedMyEvent) {
this.interestedMyEvent = interestedMyEvent;
}
}
private void updateView(int index){
View v = yourListView.getChildAt(index -
yourListView.getFirstVisiblePosition());
if(v == null)
return;
// Views you want to change
TextView someText = (TextView) v.findViewById(R.id.sometextview);
someText.setText("UPDATE");
}
Parcelable state;
@Override
public void onPause() {
// Save ListView state @ onPause
Log.d(TAG, "saving listview state @ onPause");
state = listView.onSaveInstanceState();
super.onPause();
}
...
@Override
public void onViewCreated(final View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// Set new items
listView.setAdapter(adapter);
...
// Restore previous state (including selected item index and scroll position)
if(state != null) {
Log.d(TAG, "trying to restore listview state..");
listView.onRestoreInstanceState(state);
}
}