Как использовать ContextCompat во фрагменте? Это говорит, что фрагмент не может быть преобразован в контекст

Это дополнение к ответу dmd733. Я исправил ошибку с продолжительностью дня (ну, надеюсь, я это сделал, не смог проверить каждый случай).

Я также быстро добавил свойство String к результату, который содержит общее время, прошедшее (извините за плохое вложенное ifs !!). Например, если он используется для пользовательского интерфейса и указывает, когда что-то было обновлено (например, RSS-канал). Вид неуместен, но приятно иметь:

function getTimeDiffAndPrettyText(oDatePublished) {

  var oResult = {};

  var oToday = new Date();

  var nDiff = oToday.getTime() - oDatePublished.getTime();

  // Get diff in days
  oResult.days = Math.floor(nDiff / 1000 / 60 / 60 / 24);
  nDiff -= oResult.days * 1000 * 60 * 60 * 24;

  // Get diff in hours
  oResult.hours = Math.floor(nDiff / 1000 / 60 / 60);
  nDiff -= oResult.hours * 1000 * 60 * 60;

  // Get diff in minutes
  oResult.minutes = Math.floor(nDiff / 1000 / 60);
  nDiff -= oResult.minutes * 1000 * 60;

  // Get diff in seconds
  oResult.seconds = Math.floor(nDiff / 1000);

  // Render the diffs into friendly duration string

  // Days
  var sDays = '00';
  if (oResult.days > 0) {
      sDays = String(oResult.days);
  }
  if (sDays.length === 1) {
      sDays = '0' + sDays;
  }

  // Format Hours
  var sHour = '00';
  if (oResult.hours > 0) {
      sHour = String(oResult.hours);
  }
  if (sHour.length === 1) {
      sHour = '0' + sHour;
  }

  //  Format Minutes
  var sMins = '00';
  if (oResult.minutes > 0) {
      sMins = String(oResult.minutes);
  }
  if (sMins.length === 1) {
      sMins = '0' + sMins;
  }

  //  Format Seconds
  var sSecs = '00';
  if (oResult.seconds > 0) {
      sSecs = String(oResult.seconds);
  }
  if (sSecs.length === 1) {
      sSecs = '0' + sSecs;
  }

  //  Set Duration
  var sDuration = sDays + ':' + sHour + ':' + sMins + ':' + sSecs;
  oResult.duration = sDuration;

  // Set friendly text for printing
  if(oResult.days === 0) {

      if(oResult.hours === 0) {

          if(oResult.minutes === 0) {
              var sSecHolder = oResult.seconds > 1 ? 'Seconds' : 'Second';
              oResult.friendlyNiceText = oResult.seconds + ' ' + sSecHolder + ' ago';
          } else { 
              var sMinutesHolder = oResult.minutes > 1 ? 'Minutes' : 'Minute';
              oResult.friendlyNiceText = oResult.minutes + ' ' + sMinutesHolder + ' ago';
          }

      } else {
          var sHourHolder = oResult.hours > 1 ? 'Hours' : 'Hour';
          oResult.friendlyNiceText = oResult.hours + ' ' + sHourHolder + ' ago';
      }
  } else { 
      var sDayHolder = oResult.days > 1 ? 'Days' : 'Day';
      oResult.friendlyNiceText = oResult.days + ' ' + sDayHolder + ' ago';
  }

  return oResult;
}
-3
задан Radesh 17 January 2019 в 09:23
поделиться

3 ответа

private Context context;

public Yourclassname(Context context) {
   this.context = context;
}

используйте контекст вместо «this» и используйте следующий код

if(ContextCompat.checkSelfPermission(context,android.Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED) { 
    ActivityCompat.requestPermissions(context, new String[]{android.Manifest.permission.CALL_PHONE}, REQUEST_CALL); 
}
0
ответ дан Rohit Singh 17 January 2019 в 09:23
поделиться
if(ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CALL_PHONE}, REQUEST_CALL); } 

использовать getContext () вместо этого во фрагменте

0
ответ дан Ahmed Karam 17 January 2019 в 09:23
поделиться

«это» относится к фрагменту в вашем случае.

Нам это явно означает, что вам нужны ссылки Context и Activity. Поскольку вы используете код внутри класса Fragment this, < - относится к фрагменту, а не к Activity или Context.

Как получить ссылку на контекст?
получить ее в методе onAttachMethod(Context context), доступном в классе Fragment.

class YourFragment extends Fragment{

   private Context context;

   @Override
   public void onAttach(Context context)
   {
     this.context = context;
   }
}

Как получить ссылку на активность во фрагменте?

getActivity(); 

или

(Activity)context;
0
ответ дан Rohit Singh 17 January 2019 в 09:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: