从listView中删除项目时,项目将被禁用

时间:2014-07-24 17:12:17

标签: android

我的应用程序包含一个Activity和一个后台服务(IntentService)。该活动包含listView。我想在服务中发生事件时从列表中删除第一项。我的代码是:

public class MyActivity extends Activity {

    private ListView taskListBox;
    private static ArrayAdapter taskListAdapter;
    private static ArrayList<String> data =
            new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        taskListBox = (ListView) findViewById(R.id.taskList);
        taskListAdapter = new ArrayAdapter(this, data);
        taskListBox.setAdapter(taskListAdapter);
        startService(new Intent(this, MyService.class));
        ...
    }

    public static void removeTask(int index) {
        data.remove(index);
        taskListAdapter.notifyDataSetChanged();
    }

列表填充在onResume方法中,一切正常。项目是可选择的,并且长按菜单会弹出contextMenu,但是当我从服务类调用removeTask时,会出现问题,即项目被禁用(不可选)。我的服务类是:

public class MyService extends IntentService {
    public MyService() {
        super("MyService");
    }

    protected void onHandleIntent(Intent workIntent) {

        while(true) {
            try {
                Thread.sleep(1000);
            }
            catch(InterruptedException ex) {
                Thread.currentThread().interrupt();
            }
            try {
                if (MyActivity.dateNow().compareTo(MyActivity.futureDate()) >= 0) {
                    MyActivity.removeTask(0);
                }
            }catch(Exception ex) {

            }
        }
    }
}

我确信if中的MyService块已执行,但项目未从列表中删除,它就像禁用项目​​一样。单击该项不起作用。有人能指出这段代码中的问题吗?

1 个答案:

答案 0 :(得分:0)

您不应该使用静态修饰符在“活动”和“服务”之间共享数据(和方法)。这通常是一个坏主意,因为您在2进程之间引入了同步问题。

正确的做法是将“MyActivity”绑定到“MyService”

查看此tutorial,了解如何在服务和活动之间设置绑定。

完成后,您应该在活动中创建服务可以调用的回调方法。在你的情况下,'removeTask'将是服务将调用的回调方法。