2016-06-01 35 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

呼叫在onActivityCreated方法,然后将Web服务更新您的意见

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(); 

你可以调用onExExecute()方法。

希望这对你有所帮助。