2014-09-18 2 views
0

Например, я хочу отобразить дату/время, когда мое устройство последний раз синхронизировалось с другим устройством. У меня есть что-то вроде этого прямо сейчас:Как я могу создать динамическую строку в моем представлении?

 Resources resources = context.getResources(); 
     String syncString = String.format(resources.getString(R.string.last_sync), fileLastSync); 

и я спас мою строку ресурсов в моей ценности/strings.xml:

<string name="last_sync">Last synced %s</string> 

На мой взгляд активность я следующее:

<TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" 
      android:text="@string/last_sync" 
      /> 

Но при запуске устройства появляется только строковое обозначение.

Что я делаю неправильно? Он должен показывать строку даты и времени вместо заполнителя.

Например, я жёстко мою строку как таковую:

String fileLastSync = "09-18-2014"; 

Мой выход:

Синхронизировано% S

Мой ожидаемый результат:

Последняя синхронизация : 09-18-2014 годы

+0

Что такое выход? и каков ожидаемый результат? и где вы добавляете дату и время в строку? – Multithreader

+0

Мой выход: Last Sync:% s. Обновлено сообщение, чтобы отразить, где я устанавливаю строку. –

+0

Можете ли вы попробовать resources.getTextArray(). ToString() и посмотреть, что произойдет? Или resources.getText(). ToString()? – Barodapride

ответ

1

Здесь

<TextView 
     android:id="@+id/last_sync" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:text="@string/last_sync" 
     /> 

, а затем в onCreate() поместить следующее:

Resources resources = context.getResources(); 
String syncString = String.format(resources.getString(R.string.last_sync), fileLastSync); 

TextView lastSyncTextView = ((TextView) findViewById(R.id.last_sync)); 

lastSyncTextView.setText(syncString); 
+0

Это, казалось, работало, за исключением того, что я изменил view.findViewById() на findViewById() ... Почему я должен включать информацию TextView в свою деятельность? –

+0

Спасибо за уловку, я изменил код выше, чтобы отразить ваше наблюдение. Вам нужно TextView в вашей деятельности, чтобы динамически установить его значение. Обычно я помещаю все представления, которые я буду использовать как частные переменные экземпляра. а затем назначьте их в «onCreate()». Таким образом, я с легкостью могу использовать их в любых других методах класса активности;) – Multithreader

1

сделать так:

<TextView 
      android:id="@+id/tvLastSync" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" 
      android:text="@string/last_sync" 
      /> 

Теперь в вашем Activity обновления tvLastSync:

tvLastSync=(TextView)findViewById(R.id.tvLastSync); 
    String syncString = String.format(getResources().getString(R.string.last_sync), fileLastSync); 
    System.out.println(syncString); 
    tvLastSync.setText(syncString); 
+0

Спасибо за вашу помощь. Ваше решение тоже правильное. –

0

Похоже, вы можете использовать getString (int id, Object ... formatArgs). Попробуйте передать файлLastSync как formatArg там с вашим исходным кодом.

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