0

私は Android が初めてで、現在、このクリスベンのライブラリを使用して PullToRefreshListview を実装する方法を学び始めています。データを取得するために API を呼び出すコードをどこに置くべきか、API からデータ (画像 URL) を取得した後に (ImageBitmap) をどの部分に設定する必要があるかを教えてください。私が知っているように、画像をUIにロードするときにUIがフリーズするのを避けるためにバックグラウンドで何かをする必要がありますが、よくわかりません。助けてください。

以下は、ライブラリのサンプル コードです。GetDataTask と onPostExecute で何をすべきか説明してください。画像を読み込んでいるような場合。

@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
    // Do work to refresh the list here.
    new GetDataTask().execute();
}

private class GetDataTask extends AsyncTask<Void, Void, String[]> {

    @Override
    protected String[] doInBackground(Void... params) {
        // Simulates a background job.
        try {
            Thread.sleep(4000);
        } catch (InterruptedException e) {
        }
        return mStrings;
    }

    @Override
    protected void onPostExecute(String[] result) {
        mListItems.addFirst("Added after refresh...");
        mAdapter.notifyDataSetChanged();

        // Call onRefreshComplete when the list has been refreshed.
        mPullRefreshListView.onRefreshComplete();

        super.onPostExecute(result);
    }
}

初心者の質問で申し訳ありませんが、標準に従うために確認したいだけです。私の悪い英語でごめんなさい

4

2 に答える 2

0

GetDataTask を Listener とは別のクラスに配置する必要があると思います。これは、使用できるリスナーの例です。

public abstract class RemoteCallListener implements IRemoteCallListener {

@Override
public abstract void onString(String s); //String is just an example.

@Override
public abstract void onError(Exception e);
}

非同期タスクの場合は、リスナーをコンストラクターに渡す必要があります。

private class GetDataTask extends AsyncTask<Void, Void, String[]> {

RemoteCallListener listener;
public GetDataTask(){

}

public GetDataTask(RemoteCallListener listener){
this.listener = listener;
}

@Override
protected String[] doInBackground(Void... params) {
    // Simulates a background job.
    try {
        Thread.sleep(4000);
    } catch (InterruptedException e) {
    }
    return mStrings;
}

@Override
protected void onPostExecute(String[] result) {
listener.onString(result);
    // mListItems.addFirst("Added after refresh...");
    // mAdapter.notifyDataSetChanged();

    // Call onRefreshComplete when the list has been refreshed.
    // mPullRefreshListView.onRefreshComplete();

    super.onPostExecute(result);
    }
}

呼び出しのインスタンスを作成するには、次のようにする必要があります

 GetDataTask task = new GetDataTask(yourlistener);
 task.execute("your link");

そして、「コントローラー」クラスで RemoteCallListener のインスタンスを作成し、onString が呼び出されたときに次のようにします。

   mListItems.addFirst("Added after refresh...");
    mAdapter.notifyDataSetChanged();

    // Call onRefreshComplete when the list has been refreshed.
    mPullRefreshListView.onRefreshComplete();

Android の Dialogs クラスで UI をフリーズすることもできます。次に例を示します。

public final static ProgressDialog showLoading(Context c, String title,
        String message, boolean indeterminate) {
    ProgressDialog p = new ProgressDialog(c);
    p.setTitle(title);
    p.setMessage(message);
    p.setCancelable(false);
    p.setIndeterminate(indeterminate);
    if (!indeterminate) {
        // p.setProgressDrawable( c.getResources().getDrawable(
        // R.drawable.progress ) );
        p.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        p.setProgress(0);
        p.setMax(100);
    }
    p.show();
    return p;
}

ただし、ダイアログを閉じることを忘れないでください。

さらに質問がある場合は、いつでも私に連絡できます

于 2013-05-13T02:55:59.010 に答える