Apparently the app shows dummy data
that was hard coded into the XML file.
Let's make the actual
weather data appear on screen
using the forecast adapter.
For now we'll use the same layout for
all list items, but
we'll incorporate the today
XML layout in the next video.
Conceptually the forecast adapter
manages the logics so that for
each row of cursor we create
corresponding list item.
Think back on the explanation in
lesson one about the array adapter,
except instead of
the datasource being an array,
now the datasource is a cursor
from the database The layout for
the list item is defined in
the list item forecast XML file.
For one row of the cursor,
we're going to go through and
extract out the values.
We call it binding the data to
the views because we take the value in
each column and
we set it on to a different view.
For example,
the high temperature value would be set
on to the high temperature text view.
The low temperature value will be set
onto the low temperature text view.
For the next row,
we bind the data in the same way
until we create a list item for
each row in the cursor.
Currently, our code
defines forecast adapter
as extending from
the cursor adapter class.
If you look at the documentation for
cursor adapter, you'll notice
that it's an abstract class.
There are two abstract methods that we
need to override, bindView, and newView.
The newView method returns a new list
item layout, but has no data in it.
The bindView method takes
an existing list item layout and
updates it,
with the data from the cursor.
In the forecast adapter
class in the newView method
we inflate the list item
forecast XML layout.
Then in the bindView method,
we bind the data from the cursor
to the individual views.
For example, from the cursor we
read out the weather description.
Then we have to go through the view
hierarchy to find the TextView
that has the id
list_item_forecast_textview.
Once we find the TextView, then we can
update it with the right description.
We've provided a gist of code for
the bindView method,
to help you get started.
But we left some to-dos in there for
you to do.
In the gist, we also included some
helper methods and strings for
date formatting.
That's because,
in our current implementation, all
the dates are displayed in the same way.
In the wire frames, though,
we have a more friendly date format.
Such as today, tomorrow,
Wednesday, Thursday, etc.
Here's the logic for
what the helper method does to
get the friendly date string.
If it's this week, it says today or
tomorrow or the day of the week.
If it's more than a week out, then we
use the format Monday June 8 and so on.
After you compile and
run the app, the actual weather forecast
data should now be showing in the app.
And it's using a more
friendly date format.
Check these boxes when you're done.
على ما يبدو أن التطبيق يُظهر بيانات وهمية
.تم ترميزها ترميزًا ثابتًا في ملف XML
دعونا نجعل
بيانات الطقس الفعلية تظهر على الشاشة
.باستخدام محول التنبؤ
والآن سنستخدم نفس التخطيط
لجميع عناصر القائمة، لكننا سنتحدث عن دمج
تخطيط XML الخاص بـ today
.في مقطع الفيديو التالي
ومن الناحية النظرية يدير محول التنبؤ
الأمور المنطقية ولذلك
ننشئ لكل صف في المؤشر
.عنصر قائمة مقابل
تذكروا الشرح الوارد في
،الدرس الأول حول محول الصفيف
باستثناء
،مصدر البيانات الذي كان صفيفًا
فإنه الآن مؤشر
من قاعدة البيانات ويتم تحديد تخطيط
عنصر القائمة في
.ملف XML الخاص بالتنبؤ بعناصر القائمة
،وفيما يتعلق بصف واحد من المؤشر
سنقوم بدراسة القيم
.واستخراجها
ونسمّي ذلك ربط البيانات
بطرق العرض لأننا نأخذ القيمة في
كل عمود
.ونضعها على عرض مختلف
،وعلى سبيل المثال
سيتم وضع قيمة درجة الحرارة العظمى
.على عرض النص الخاص بدرجة الحرارة العظمى
ويتم وضع قيمة درجة الحرارة الصغرى
.على عرض النص الخاص بدرجة الحرارة الصغرى
،وبالنسبة للصف الثاني
نربط البيانات بنفس الطريقة
حتى ننشئ عنصر قائمة
.لكل صف في المؤشر
وفي الوقت الحالي، تحدد التعليمة البرمجية
محول التنبؤ
على أنه امتداد من
.فئة محولات المؤشر
وإذا نظرتم إلى وثائق
محول المؤشر، ستلاحظون
.أنه فئة مجردة
ويوجد أسلوبان مجردان
.سنضطر إلى تجاوزهما، bindView وnewView
وينتج عن أسلوب newView تخطيط جديد
.لعناصر القائمة، لكنه لا يحتوي على أي بيانات
ويأخذ أسلوب bindView
تخطيط حالي لعناصر القائمة
،ويحدثه
.ببيانات من المؤشر
وفي فئة محول التنبؤ
في أسلوب newView
نقوم بتضخيم
.تخطيط XML الخاص بالتنبؤ بعناصر القائمة
،ثم في أسلوب bindView
نربط البيانات من المؤشر
.بطرق العرض الفردية
على سبيل المثال، من المؤشر
.نقرأ وصف الطقس
ثم يتعين علينا البحث في
التدرج الهرمي للعرض للعثور على TextView
الذي يحمل المعرّف
list_item_forecast_textview
وفور العثور على TextView، نستطيع
.تحديثه بالوصف المناسب
وقد وفرنا خلاصة وافية عن التعليمة البرمجية
،لأسلوب bindView
.لنساعدكم في بدء العمل
ولكننا تركنا بعض الأعمال
.لتقوموا بها بأنفسكم
وفي الخلاصة الوافية، ذكرنا بعض
الأساليب المساعدة والسلاسل
.لتنسيق التاريخ
،وهذا لأن جميع التواريخ
،في التطبيق الذي بين أيدينا
.تُعرض بنفس الطريقة
ومع ذلك، ففي الأطر السلكية
.نحظى بتنسيق تاريخ أكثر ملاءمة
مثل اليوم والغد
.والأربعاء والخميس وهكذا
وإليكم المنطق
الذي يتبعه الأسلوب المساعد
.للحصول على سلسلة التاريخ الملاءمة
إذا كان التاريخ في هذا الأسبوع، يُقال اليوم أو
.الغد أو اسم يوم الأسبوع
وإذا كان التاريخ بعد أكثر من أسبوع، فعندئذٍ
.نستخدم التنسيق الإثنين 8 يونيو وهكذا
وبعد أن تقوموا بتجميع التطبيق
وتشغيله، فينبغي أن تكون الآن البيانات الفعلية
.لتوقع حالة الطقس معروضة في التطبيق
وأن يكون تنسيق التاريخ
.الذي يستخدمه أكثر ملاءمة
.حددوا هذه المربعات عند الانتهاء
これはxmlファイルの中に
ハードコーディングされたダミーデータです
ForecastAdapterを使って
実際の気象データを表示しましょう
ここではひとまず すべてのリスト項目に
同じレイアウトを使いますが
次の講義では
todayのXMLレイアウトを組み込みます
概念的にForecastAdapterは
Cursorの行ごとに対応したリスト項目を
作成するようにロジックを処理します
レッスン1でお話しした
ArrayAdapterを思い出してください
ただし データソースは配列ではなく
ここではデータベースのCursorです
リスト項目のレイアウトは
list_item_forecast.xmlファイルで定義されます
経由するCursorの1行に対して
1つずつ進みながら値を抽出します
これを Viewに対して
データをバインドするといいます
それぞれの列の値を取り込み
別のViewに設定するからです
例えば 最高気温の値は最高気温のTextViewに
最低気温の値は最低気温のTextViewに設定されます
次の行でも同様にデータをバインドしましょう
Cursor内の各行に対応したリスト項目を
作成するまで続けます
コードはCursorAdapterクラスから
派生したForecastAdapterを定義しています
CursorAdapterの文書を見ると
それはAbstractクラスだとわかるでしょう
オーバーライドするAbstractメソッドは
2つあります
bindViewとnewViewです
newViewメソッドは データの入っていない
新しいリスト項目のレイアウトを返します
bindViewメソッドは
既存のリスト項目のレイアウトを取得し
cursorのデータでそれをアップデートします
ForecastAdapterクラスの中の
newViewメソッドの中で
list_item_forecast.xmlレイアウトを
インフレートします
そしてbindViewメソッドの中で
cursorのデータを個々のViewにバインドします
例えばcursorから天気の説明を読み出します
そしてビュー階層をたどって
id.list_item_textviewというIDの
TextViewを探します
TextViewが見つかったら 正しいdescriptionで
アップデートすることができます
皆さんのためにbindViewメソッドのコードのGistを
提供していますが TODOは残しています
Gistの中には ヘルパーメソッドと
日付のフォーマット用の文字列も入っています
今の実装では すべての日付が
同じように表示されるからです
しかし ワイヤーフレームでは
親しみやすい表記になっています
例えば 今日、明日、水曜日、木曜日などです
ヘルパーメソッドが作成する
親しみやすい文字列は次のとおりです
“今週”ならば
今日、昨日、それから曜日です
1週間以上先なら
“6月8日 月曜日”などと表示されます
アプリをコンパイルして実行したら
実際の気象データが表示され
日付は親しみやすい表記になっているはずです
完了したらチェックを入れましょう
O aplicativo mostra dados fictícios
com valores fixados no código no arquivo XML.
Vamos mostrar os dados reais
de previsão do tempo na tela
com o adaptador de previsão.
Estamos usando o mesmo layout para
todos os itens de lista, mas
incluiremos o layout
XML hoje no próximo vídeo.
O adaptador de previsão
gerencia a lógica para que,
a cada linha do cursor, criemos
o item de lista correspondente.
Pense na explicação da lição um
sobre o adaptador de array,
mas em vez de
a fonte de dados ser um array,
a fonte de dados é um cursor
do banco de dados. O layout
do item da lista é definido no
arquivo XML de previsão de item de lista.
Vamos examinar
cada linha do cursor e
extrair os valores dela.
Dizemos vincular os dados
às exibições porque pegamos o valor
em cada coluna e
definimos em uma exibição diferente.
Por exemplo,
o valor de temperatura máxima é definido
para a textView da temperatura máxima.
O valor da temperatura mínima é definido
para a textView da temperatura mínima.
Na próxima linha,
vinculamos os dados do mesmo modo
até criar um item de lista
para cada linha do cursor.
Agora, o código
define o adaptador de previsão
como extensão
da classe adaptador de cursor.
Se olhar na documentação do
adaptador de cursor, você verá
que é uma classe abstrata.
Existem dois métodos abstratos que temos
de sobrepor: bindView e newView.
O método newView retorna um novo layout
de item de lista, mas não tem dados.
O método bindView pega
um layout de item de lista existente
e o atualiza
com os dados do cursor.
Na classe adaptador de
previsão no método newView,
inflamos o layout XML do menu
de previsão de item de lista.
Depois, no método bindView,
vinculamos os dados do cursor
às exibições individuais.
Por exemplo, no cursor,
lemos a descrição da previsão do tempo.
Então, percorremos a hierarquia
de exibição para achar a TextView
que tem o id
list_item_forecast_textview.
Depois de achar a TextView, podemos
atualizá-la com a descrição correta.
Fornecemos um gist de código para
o método bindView
para ajudá-lo a começar.
Mas deixamos algumas coisas lá para
você fazer.
O gist também inclui alguns
métodos auxiliares e strings para
formatação de data.
Isso porque,
na implementação atual, todas
as datas são exibidas do mesmo modo.
Nos wireframes, porém,
temos um formato de data mais amigável,
como hoje, amanhã,
quarta-feira, quinta-feira, etc.
Esta é a lógica do que
o método auxiliar faz para
obter a string de data amigável.
Se for nesta semana, aparece hoje
ou amanhã no dia da semana.
Se for mais de uma semana, usamos
o formato "8 de junho segunda-feira" e assim por diante.
Depois de compilar e
executar o aplicativo, os dados da previsão
de tempo real devem aparecer na tela.
E usando um formato
de data mais amigável.
Marque estas caixas ao terminar.
显然,应用会显示硬编码
为 XML 文件的虚拟数据。
让我们使用预报适配器
将实际的天气数据
显示在屏幕上。
我们暂时会为所有列表项
使用相同的布局,但
之后会将今天的
XML 布局整合到下一个视频中。
从概念上说,预报适配器
会管理逻辑,以便
我们为游标的每一行
创建对应的列表项。
回想一下第一课中
关于数组适配器的说明,
不同之处在于当时
的数据源是数组,
而现在的数据源是数据库
中的游标。列表项
的布局在列表项
预报 XML 文件中定义。
对于游标的每一行,
我们将仔细查看并
提取出值。
我们把这一操作称为将数据与
视图绑定,因为我们会提取每一列
中的值并将其
设置到其他视图上。
例如,
高温值将设置到
高温文本视图上。
低温值将设置到
低温文本视图上。
对于下一行,
我们将采用相同的方式绑定数据,
直至为游标中的每一行
创建列表项。
目前,我们的代码
将预报适配器定义
为扩展自游标适配器
类。
如果您查看游标适配器的
文档,则会发现
它是一个抽象类。
有两种需要重写的抽象
方法:bindView 和 newView。
newView 方法会返回一个新的列表
项布局,但其中没有数据。
bindView 方法会采用现有
列表项布局,并使用
游标中的数据
更新它。
在 newView 方法的预报
适配器类中,
我们扩大了列表项
预报 XML 布局。
然后,在 bindView 方法中,
我们将游标中的数据
与单个视图绑定。
例如,我们从游标中
读取出天气说明。
然后,我们需要仔细查看视图
层级以查找
ID 为 list_item_forecast_textview 的
TextView。
一旦找到该 TextView,我们就可以
使用正确的说明将其更新。
我们提供了 bindView 方法
的代码 Gist,
供您开始时使用。
但是,我们也给您留下了一些
待办事项。
在此 Gist 中,我们还包含了一些
用于设置
日期格式的辅助方法和字符串。
这是因为,
在我们目前的实现中,所有
日期均采用同一方式显示。
但在线框图中,
我们有更加友好的日期格式,
如今天、明天、
星期三、星期四等。
这是辅助方法
为获得友好日期字符串
而执行的操作的逻辑。
如果是当周,它会显示今天、
明天或星期几。
如果时间超过一周,我们将使用
6 月 8 日星期一等格式。
在您编译并
运行应用后,真正的天气预报
数据将显示在应用中。
这些数据将使用
更加友好的日期格式。
完成后,请选中这些方框。