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 日星期一等格式。
在您编译并
运行应用后，真正的天气预报 数据将显示在应用中。
这些数据将使用 更加友好的日期格式。
完成后，请选中这些方框。