从android服务更新我的活动中的listview
我有两门课 1.活动课 2.服务级别 当服务得到任何更新时,我需要在我的活动中更新我的列表视图。 事实上,我像一个聊天应用程序一样尝试,我的服务总是检查我的数据库,如果它得到任何新字符串,我需要在我的活动中更新,而不需要再次重建,我只需要刷新列表视图。我发现它将被操纵使用iBinder,但我不知道如何使用它。有人能给我推荐一些代码示例吗从android服务更新我的活动中的listview,android,android-service-binding,Android,Android Service Binding,我有两门课 1.活动课 2.服务级别 当服务得到任何更新时,我需要在我的活动中更新我的列表视图。 事实上,我像一个聊天应用程序一样尝试,我的服务总是检查我的数据库,如果它得到任何新字符串,我需要在我的活动中更新,而不需要再次重建,我只需要刷新列表视图。我发现它将被操纵使用iBinder,但我不知道如何使用它。有人能给我推荐一些代码示例吗 您应该使用绑定服务。我在申请表中做了类似的事情。单击refresh,我调用一个服务,该服务在后台获取数据并更新UI 在这里查看我的服务: 活动: 使用Ott
您应该使用绑定服务。我在申请表中做了类似的事情。单击refresh,我调用一个服务,该服务在后台获取数据并更新UI 在这里查看我的服务: 活动: 使用Otto库也很有帮助:
如果没有更多信息,我无法提供任何有用的代码示例,但是我认为您可能需要的是ListAdapter。ListAdapter接受一个listview和一个dataset(在您的示例中,可能是一个字符串数组),并将这两个元素组合在一起。每当数据集发生更改时(在您的情况下,就是当您的服务检测到一个新字符串并将其添加到数组中时),您只需调用ListAdapter.notifyDataSetChanged(),listview就会自动更新为您的新信息。
检查有关可能使用的特定ListAdapter的更多信息。假设您有名为MainActivity的活动类,在该类中,您使用名为listviewAdapter的适配器初始化了ListView。将此代码放入MainActivity中:
public static Handler UIHandler;
static {
UIHandler = new Handler(Looper.getMainLooper());
}
public static void runOnUI(Runnable runnable) {
UIHandler.post(runnable);
}
在服务类中更改listview数据时,请编写以下代码以将新数据应用于listview:
MainActivity.runOnUI(new Runnable()
{
public void run()
{
try
{
MainActivity.listviewAdapter.notifyDataSetChanged();
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
谢谢你的回答,……事实上你是对的。但我的问题是,我如何知道我的活动中的数据发生了变化……我应该如何从我的服务中得到暗示。?我不必亲自这么做,所以我不能确定哪种方法是最好的,但我认为a适合你。它是一个抽象类,可以处理服务广播的消息。服务在找到新字符串时将使用其sendBroadcast()方法,并且您的活动将注册为BroadcastReceiver,当接收到广播时将执行一些操作。这很好,目前正在运行,但我担心在以下情况后会出现一些与线程相关的异常:/
public static Handler UIHandler;
static {
UIHandler = new Handler(Looper.getMainLooper());
}
public static void runOnUI(Runnable runnable) {
UIHandler.post(runnable);
}
MainActivity.runOnUI(new Runnable()
{
public void run()
{
try
{
MainActivity.listviewAdapter.notifyDataSetChanged();
}
catch (Exception e)
{
e.printStackTrace();
}
}
});