【问题标题】:Handling async call inside onItemClick()在 onItemClick() 中处理异步调用
【发布时间】:2014-06-19 18:42:31
【问题描述】:

在从项目列表中进行选择时,我有一个 onItemClick() 的实现。不过里面 onItemClick() 我需要通过异步的库调用执行检查。基本上在 onItemClick() 调用 XYZ.checkConnection(booleanCallback);是异步的。 然后在 booleanCallback(int status) 我可以检查状态。我可以使用哪种模式来处理这种情况?

【问题讨论】:

  • 一点上下文加代码会有所帮助。如果它是您想要在回调中执行的 UI 相关任务?
  • 是的,一旦我从异步调用中取回结果,我需要执行与 UI 相关的任务。

标签: android asynchronous onitemclick


【解决方案1】:
public class Tester extends Activity {
private ListView list;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            new CheckConnection(list.getAdapter().getItem(position))
                    .execute();

        }
    });
}

private class CheckConnection extends AsyncTask<Void, Void, Void> {
    private Object o;

    public CheckConnection(Object o) {
        this.o = o;
    }

    @Override
    protected void onPreExecute() {
        // Do things like initiate progress bar etc
    }

    @Override
    protected Void doInBackground(Void... params) {
        // Do connection check
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        int status = 0;
        // determine status
        booleanCallBack(status, o);
    }
}

private void booleanCallBack(int status, Object o) {
    // perform UI related
}
}

如果你想要一个模块化类,你可以使用委托方法

我基本上已经给了你一个起点,这可以根据你的需要进行调整。我没有完全了解你的上下文。因此是广义的答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 2018-03-15
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多