0

AsyncTask私が作成したバックグラウンド スレッドの 1 つで作業しており、指定された のサイズを知る必要がありViewます。ただし、このビューがまだ作成されていない場合もあります。問題は、Activity のライフ サイクルのどの部分で、すべてのビューが既に配置され、ディメンションが定義されていることを確認できるかということです。

PS: 私のコードは a 内にあり、既にメソッドFragmentを試しました。onResume()

4

1 に答える 1

0

サイズを取得するビューをカスタマイズします。

public class SizeFetchableView extends YourView{

//constructors...

private SizeFetchListener mSizeFetchListener;
public void setSizeFetchListener(SizeFetchListener l){
       mSizeFetchListener = l;
}
public void onLayout(boolean isChanged,int l,int t,int r,int b){
       super.onLayout(l,t,r,b);
       if(mSizeFetchListener!=null){
         mSizeFetchListener.onFetchSize(this,isChanged,getWith(),getHeight());
       }
}

public interface SizeFetchListener{
public void onFetchSize(View view,boolean isChanged,int w,int h);
}

}

そのため、最初に SizeFetchListener を使用してビュー サイズを取得できますが、サイズに依存するスレッド ロジックは、フェッチ サイズ インターフェイスの呼び出しを待機する必要があります。

public class Task extends Thread implements SizeFetchListener{
SizeFetchableView mSizeFetchableView;
   public Task(SizeFetchableView v){
          mSizeFetchableView=v;
          mSizeFetchableView.setSizeFetchListner(this);
   }

   public void onFetchSize(View view,boolean isChanged,int w,int h){
   //and this time ,you can start you thread if not,or continue you logic who waiting the size

   }
}

//私の悪い英語を許してください.Thanks

于 2014-02-09T02:45:36.963 に答える