2016-06-21 3 views
0

私はメソッドgetView()をオーバーライドして、新しいビューを返すonSuccess()メソッド内でビューを膨張させようとしています。 onSuccessによって返される値は、getView()によって返されますか?ここでcallBack(onSuccess())を実装するメソッドは、onSucess()によって返された値を返しますか?

が私のコードです:

@Override 
    public View getView(final int position, final View view,final ViewGroup parent) { 

    aMethodWithAcallBack(new myCallBack(){ 

     @Override 
     public void onSuccess(ArrayList<Content> contents) { 

      contentsList = contents ; 
      View mView = inflateIfRequired(view, position, parent); 

      if(getItem(position).content_type_id == 2) { 
       bindCard(view, getItem(position)); 
      } 
      else { 
       if(getItem(position).content_type_id == 3) 
       bindVideo(view,getItem(position)) ; 
      } 

      return mView ; 
     }); 


     @override 
     public void onFail() { 
     // 
     } 

     return view ; 
    } 

私はCallBackを使用し、なぜあなたは不思議に思われるかもしれcontentsList項目が私のListViewの項目であり、そしてこのcontentsListはのおかげで開始されたので、私はそれを使用する必要がありますcallBackは、要素がサーバーからフェッチされるためです。

+0

アーキテクチャを改訂する必要があります。できるだけ 'getView()'で行うべきではなく、 'aMethodWithAcallBack()'が非同期の場合、期待している結果は得られません。データを表示する前に準備するか、更新を完全に同期させます。 – tynn

+0

'public void onSuccess'が' mView'を返すことができるのはかなり奇妙です。それはコンパイルされますか? – jaibatrik

+0

あなたのアンサーに感謝します。私は物事を同期的に行うことができませんcontentsListはサーバからの要素でいっぱいです –

答えて

0

いいえ、onSuccess()の値を返すことによっては実行できません。 onSuccess()メソッドから返された値を受け取るメインスレッドは存在しないためです。

説明:

1)getViewメソッド()メソッドは、他の場所から呼び出される - これは、1つのスレッド私たちがメインとしてそれを維持させています。

2)このメインスレッドの実行フローでは、非同期コールバックメソッドaMethodWithAcallBack()が実行されますが、この非同期コールバックコールは別のスレッドになります。非同期コールバック一旦return view ;

4)を実行する方法をパススルーし、終了しますgetViewメソッド()メソッドを実行している

3)メインスレッドは、return mView ;が実行されるライン成功であるがないメインスレッドが存在しませんそれを受け取る。つまり、getView()メソッドを呼び出した主スレッドはありません。

+0

あなたの説明は非常に明確です、ありがとうございます:) –

関連する問題