1

onCreateViewメソッドは、Webサービスからの応答を待たずに終了します。もちろん、ビューはnullを返しています。他のすべてが正しく機能します。私の意味は以下の通りです。Web呼び出し応答データで膨らんだビューを返す方法

private View view; 
private View notExistedOwnStory; 
private View existedOwnStory; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

... 

notExistedOwnStory = inflater.inflate(R.layout.tab_writestory, container, false); 
existedOwnStory = inflater.inflate(R.layout.tab_deletestory, container, false); 

checkOwnStory(storyID, username); 

if(view == notExistedOwnStory){ 

     ... 

    } 

    if (view == existedOwnStory) { 

     ... 

    } 

    return view; 
} 

private void checkOwnStory(final String storyID,final String username) { 

    // Tag used to cancel the request 
    String tag_string_req = "req_checkOwnStory"; 

    pDialog.setMessage("Checking Own Story ..."); 
    showDialog(); 

    StringRequest strReq = new StringRequest(Method.POST, AppConfig.CHECK_OWN_STORY, new Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 
      Log.d(TAG, "Checking Own Story Response: " + response.toString()); 
      hideDialog(); 

      try { 
       JSONObject jObj = new JSONObject(response); 
       boolean error = jObj.getBoolean("error"); 
       if (!error) { 

        // here is the set according to the response 
        view = existedOwnStory; 

       } else { 

        view = notExistedOwnStory; 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     } 
    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e(TAG, "Checking Own Story Error: " + error.getMessage()); 
      Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_LONG).show(); 
      hideDialog(); 
     } 
    }) { 

     @Override 
     protected Map<String, String> getParams() { 
      // Posting params to check own story url 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("storyID", storyID); 
      params.put("username", username); 

      return params; 
     } 

    }; 

    // Adding request to request queue 
    AppController.getInstance().addToRequestQueue(strReq, tag_string_req); 
} 

checkOwnStoryメソッドが完全に終了し、それに応じてonCreateViewメソッドが機能する場合はどうすればよいですか?

答えて

0

これは正しいデザインではありません。 onCreateView()はメインスレッドで実行されるため、ビューを拡張するためにこのメソッドで単純に待機することはできません。したがって、XML(Probably With Progressダイアログ)を展開して、一時的な進捗状況を表示することができます。

からHandlerを通じてメッセージを投稿するには、JSONを正常に解析した後にHandler.post()メソッドを使用します。

あなたはhandleMessage()メソッドを実装して、あなたがいずれかのプログラムで(addView)またはXMLファイルからViewStubてほしいこととView.VISIBLEに見る更新も見る方追加することができますonResponse()メソッドから取得するメッセージに基づいてすることができます。

+0

私はあなたのデザインでやったことがあります、私はちょうど私が尋ねたデザインがより良いかどうかは不思議に思っていました。回答ありがとうございます。 –

+0

onCreateView()やonStart()などのライフサイクルメソッドが長い時間を要する作業であれば、より良い設計ではありません。応答性の高いUIを設計することが期待されているため – Guna

関連する問題