2014-10-29 5 views
0

Кто-то знает, как SimpleCursorAdapter получает информацию о базе данных без взаимодействия с контент-провайдером? Я искал в документах, но я еще не понялAndroid SimpleCursorAdapter flow

Я делаю курс Udacity для изучения Android, и я использую этот фрагмент, но я не могу понять поток.

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

    mForecastAdapter = new SimpleCursorAdapter(
      getActivity(), 
      R.layout.list_item_forecast, 
      null, 
      // the column names to use to fill the textviews 
      new String[]{WeatherContract.WeatherEntry.COLUMN_DATETEXT, 
        WeatherContract.WeatherEntry.COLUMN_SHORT_DESC, 
        WeatherContract.WeatherEntry.COLUMN_MAX_TEMP, 
        WeatherContract.WeatherEntry.COLUMN_MIN_TEMP 
      }, 
      // the textviews to fill with the data pulled from the columns above 
      new int[]{R.id.list_item_date_textview, 
        R.id.list_item_forecast_textview, 
        R.id.list_item_high_textview, 
        R.id.list_item_low_textview 
      }, 
      0 
    ); 

    mForecastAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder(){ 

     @Override 
     public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
      boolean isMetric = FormatServices.isMetric(getActivity()); 
      switch (columnIndex) { 
       case COL_WEATHER_MAX_TEMP: 
       case COL_WEATHER_MIN_TEMP: { 
        // we have to do some formatting and possibly a conversion 
        ((TextView) view).setText(FormatServices.formatTemperature(
          cursor.getDouble(columnIndex), isMetric)); 
        return true; 
       } 
       case COL_WEATHER_DATE: { 
        String dateString = cursor.getString(columnIndex); 
        TextView dateView = (TextView) view; 
        dateView.setText(FormatServices.formatDate(dateString)); 
        return true; 
       } 
      } 
      return false; 
     } 
    }); 

    View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
    final ListView listView = (ListView) rootView.findViewById(R.id.listview_forecast); 
    listView.setAdapter(mForecastAdapter); 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      /*String forecast = mForecastAdapter.getItem(position); 
      Toast.makeText(getActivity(), forecast, Toast.LENGTH_SHORT).show(); 
      Intent intent = new Intent(getActivity(), DetailActivity.class) 
        .putExtra(Intent.EXTRA_TEXT, forecast); 
      startActivity(intent);*/ 
     } 
    }); 
    return rootView; 
} 

Кто-то может помочь мне понять поток SimpleCursorAdapter?

+0

Почему вы передаете нуль в '' 'SimpleCursorAdapter''' конструктор, где вы должны пропусканием' '' Cursor'''? –

+0

@NathanWalters, я не знаю почему! Для этого я не понимаю поведение SimpleCursorAdaptar. Я просто использую пример курса Udacity для Android. Вы можете увидеть более полный https://github.com/bkawakami/Udacity-Sunshine/blob/master/app/src/main/java/com/sunshine/fragment/MainFragment.java –

+0

Просто передайте ему курсор, указывающий на данные, которые вы хотите отобразить в списке. Знаете ли вы, что хотите получить курсор из запроса базы данных? –

ответ

0

Я мог понять, как это работает SimpleCursorAdapter. Я с помощью загрузчика, чтобы получить информацию и добавил после

@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
    mForecastAdapter.swapCursor(data); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^