원격 서버와 통신하는 백그라운드 서비스를 실행하는 애플리케이션을 작성 중입니다. 서버에서 나에게 새 메시지를 보내면 UI에 표시된 객체를 업데이트 한 다음 UI보기를 업데이트하여 객체의 새 상태를 나타내야합니다 (예 : 객체의 배경색이 참인 경우 - 녹색으로보기의 배경 및 허위로보기의 배경을 빨간색으로 설정).Android 서비스 communcation
나는 ArrayAdapter를 던지는 모든 객체의 ArrayList를 모두 표시하는 목록보기를 사용하고 있습니다.
정적 참조 용 Application 개체가 있고 현재 실행중인 활동을 저장하는 CurrentActivity 속성이 있습니다 (UI가 닫혀 있으면 null). 내 서비스에서
: 내 활동에
onNewMessage(boolean backgruond)
{
if (app.getCurrentActivity != null)
app.getCurrentActivity.onNewMessage(background);
}
:
난은 UI 업데이트하려면이 코드를 사용하고
onNewMessage(boolean background)
{
object.setBackground(bacground);
Log.d("Background", String.valueof(background));
runOnUiThread(new Runnable() {
@Override
public void run()
{
arrayAdapter.notifyDataSetChanged();
}
});
}
및 로그 오른쪽 배경 상태를 반환하지만, ,보기가 notifyDataSetChanged()로 새로 고침되지 않습니다.
나는 Activity DiscastRecevier에 메시지를 보내려고했지만 서버에서 오는 많은 메시지가 있고 많은 수신기를 등록해야하기 때문에 훨씬 더 복잡합니다. 게다가 - 내가 이해하지 못하는 이유는 것 ListView에 업데이트하는 recevier 작업과 습관이 메커니즘 .. 작업 방법의
예 :
ListViewActivity - BaseActivity에서 상속 :
@Override
public void onUnFriend(FacebookUser facebookUser, boolean isYouRemovedClient)
{
super.onUnFriend(facebookUser, isYouRemovedClient);
updateView();
}
을 BaseActivity (Activity를 확장하는 수퍼 클래스) :
public void onUnFriend(FacebookUser facebookUser, boolean isYouRemovedClient)
{
facebookUser.setApplicationFriend(false);
app.getApplicationFriends().remove(facebookUser);
app.getDatabaseManager().deleteApplicationFriend(facebookUser.getId());
if (isYouRemovedClient)
app.showToast(facebookUser.getName() + " has removed from your friends", true);
else
app.showToast(facebookUser.getName() + " has removed you from friends", true);
}
이 하나가 작동하여 배경이 변경됩니다. 색상을 ListView.
예를 ListViewActivity를 작동하지 :
@Override
public void onFriendRequestAccepted(FacebookUser facebookUser, boolean showDialog) {
super.onFriendRequestAccepted(facebookUser, showDialog);
updateView();
}
BaseActivity : 어떤 업데이트가 이루어지지 않습니다
public void onFriendRequestAccepted(FacebookUser facebookUser, boolean showDialog)
{
facebookUser.setApplicationFriend(true);
app.getApplicationFriends().add(facebookUser);
app.getDatabaseManager().addApplicationFriend(facebookUser);
if (showDialog)
app.showNewEventActivity(facebookUser, EventDialogManager.EVENT_FRIEND_ACCEPTED);
}
... 난 정말 이유를 이해할 수 없다 ..
내가 보여준 코드 스 니펫은 질문에 대해 작성한 예제입니다. 어댑터의 데이터를 변경 했으므로 속성을 변경했습니다.이 객체는 arraylist 내부에 있습니다. adpater –
나는 그들이 쓸모 없다는 것을 의미하지는 않았다. 그들은 내 문제를 보여 주기로되어있다. ... –
하지만 객체 속성이 변경된 경우 notifyOnDataSetChanged가 뷰를 업데이트해야 하는가? –