最初にProgressBarを表示するフラグメントを作成しようとしています。他のスレッドは、フラグメントに追加されるいくつかのビューにデータを入力するために、いくつかの情報(リモートサーバーからもたらされた情報-数秒かかります)をもたらす関数を呼び出します. ビューをフラグメントに追加しようとしましたが、メイン スレッドにないスレッドでは UI を変更できないという例外が発生しました。だから私はUIスレッドで実行しますが、ここで問題は、すべての情報がサーバーから返される瞬間までUIがスタックすることです。
ここに私のコードがあります:
public class MainSalePage extends SherlockFragment
{
protected View maneSalePage;
protected List<SaleObj> saleList;
protected int numberOfsalesOnScreen;
protected LinearLayout saleConteiner;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
maneSalePage = inflater.inflate(R.layout.main_page_fragment, container, false);
numberOfsalesOnScreen = 0;
saleConteiner = (LinearLayout) maneSalePage.findViewById(R.id.salesContainer);
getActivity().runOnUiThread(new Runnable()
{
@Override
public void run()
{
SaleService saleService = new SaleService();
saleList = saleService.getNextSales(numberOfsalesOnScreen); //the operation that takes time.
for(int i = 0; i < saleList.size(); i++)
{
SaleRow saleRow = new SaleRow(getActivity());
saleRow.populateWith(saleList.get(i));
saleConteiner.addView(saleRow);
}
}
});
return maneSalePage;
}
}
サーバーからすべてのデータを取得するまでUIをスタックせずにフラグメントを表示するにはどうすればよいですか?
ありがとう!