2016-06-01 17 views
-3

webserviceからデータを取得するフラグメントでアダプタビューを設定したいと思います。ビューの読み込みでラグが発生しないように、非同期タスクをどこで実行する必要がありますか? onAttachとonCreateviewで試しましたが、期待どおりに動作していませんか? `ビューを更新するために、非同期タスクをフラグメントで実行する必要がありますか?

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     Log.d("oncreateview","oncreateview"); 
     View root = inflater.inflate(R.layout.my_calendar_view, container, false); 
     _calendar = Calendar.getInstance(Locale.getDefault()); 
     _calendar = Calendar.getInstance(Locale.getDefault()); 
     month = _calendar.get(Calendar.MONTH) + 1; 
     year = _calendar.get(Calendar.YEAR); 
     String j="{\"userId\":\"733894\",\"startDate\":\"24-04-2016\",\"endDate\":\"25-04-2016\"}"; 
     new TimeSheetTask(getActivity(),j) { 

      @Override 
      protected void onPostExecute(String result) { 

       super.onPostExecute(result); 
       gson = new Gson(); 
       timesheet = gson.fromJson(result, Timesheet.class); 
       if (timesheet != null) { 


        adapter = new GridCellAdapter(MyCalendarFragment.this, 
          R.id.calendar_day_gridcell, month, year, timesheet.getTimeSheetList()); 
        calendarView.setAdapter(adapter); 


       } 
      } 
     }.execute(); 



     prevMonth = (ImageView) root.findViewById(R.id.prevMonth); 
     prevMonth.setOnClickListener(this); 

     currentMonth = (TextView) root.findViewById(R.id.currentMonth); 
     currentMonth.setText(DateFormat.format(dateTemplate, 
       _calendar.getTime())); 

     nextMonth = (ImageView) root.findViewById(R.id.nextMonth); 
     nextMonth.setOnClickListener(this); 

     calendarView = (GridView) root.findViewById(R.id.calendar); 
     if (timesheet != null) { 


      adapter = new GridCellAdapter(MyCalendarFragment.this, 
        R.id.calendar_day_gridcell, month, year, timesheet.getTimeSheetList()); 
      calendarView.setAdapter(adapter); 
     } 


     return root; 
    }` 
+0

いくつかのコードを入力してください:)。 – ArbenMaloku

+0

にコードが追加されました。メインスレッドで –

+0

onPostExecuteが実行されると、JSON onBackgroundを逆シリアル化する必要があります。 – ArbenMaloku

答えて

0

あなたも、その後、いくつかのローディングバーを表示したい場合は...あなたはこのようにそれを行うことができますあなたの意見

0

を更新し

new TimeSheetTask<String, String, String>() { 
@Override 
protected String doInBackground(String... params) { 

String j="{\"userId\":\"733894\",\"startDate\":\"24-04-2016\",\"endDate\":\"25-04-2016\"}"; 
return j; 
     } 

     @Override 
     protected void onPostExecute(String result) { 

      super.onPostExecute(result); 
      gson = new Gson(); 
      timesheet = gson.fromJson(result, Timesheet.class); 
      if (timesheet != null) { 


       adapter = new GridCellAdapter(MyCalendarFragment.this, 
         R.id.calendar_day_gridcell, month, year, timesheet.getTimeSheetList()); 
       calendarView.setAdapter(adapter); 


      } 
     } 
    }.execute(); 

をonActivityCreated方法でWebサービスを呼び出し、 onPreExecute()メソッドを呼び出すことができます。

ご希望の場合はこちらをご覧ください。

関連する問題