Разработка мобильного приложения для развивающего образовательного центра



Pdf көрінісі
бет21/26
Дата29.05.2022
өлшемі1,62 Mb.
#35872
түріРеферат
1   ...   18   19   20   21   22   23   24   25   26
Байланысты:
22Yagypov2

public
class
DirectionsFragment
extends
BaseFragment
<
DirectionPresenter
>
implements
DirectionView 
{
@BindView
(
R
.
id
.
list
)
ListView mListView
;
@Override
protected
void
onSetup
()
{
if
(
hasArgument
(
CONST
.
PARENT
))
pr
().
getDirection
(
getArgument
(
CONST
.
PARENT
));
else
pr
().
getDirection
(
0
);
}
@Override
public
void
showDirections
(
List
<
Direction
>
pDirections
)
{
mListView
.
setAdapter
(
new
DirectionAdapter
(
pDirections
));
}
@OnItemClick
(
R
.
id
.
list
)
void
onDirectionClick
(
View view
)
{
Direction direction 
=
((
DirectionHolder
)
view
.
getTag
()).
item
();
Bundle args 
=
new
Bundle
();
if
(
direction
.
getType
()
==
Direction
.
SUB_DIRECTION
)
{
args
.
putInt
(
CONST
.
PARENT
,
direction
.
getId
());
ViewFactory
.
create
(
ViewFactory
.
DIRECTIONS_VIEW
).
show
(
getActivity
(),
args
);
}
else
{
args
.
putInt
(
CONST
.
VIEW_ID
,
ViewFactory
.
DIRECTIONS_ITEM_VIEW
);


70 
args
.
putSerializable
(
CONST
.
CONTENT
,
direction
);
ViewFactory
.
create
(
ViewFactory
.
BACK_CONTENT_VIEW
).
show
(
getActivity
(),
args
);
}
}
}
Код 16. Фрагмент раздела направлений 
Раздел работает рекурсивно, это значит, что если тип подраздел, тогда 
открывается этот же раздел с другим содержимым, а если тип раздел с 
контентом тогда откроется новое окно, в котором отображается информация. 
Презентер направлений такой же, как и новостной: 
public
class
DirectionPresenterImpl
extends
BasePresenterImpl
<
DirectionView
>
implements
DirectionPresenter 
{
public
DirectionPresenterImpl
(
DirectionView pView
)
{
super
(
pView
);
}
@Override
public
void
getDirection
(
int
pParent
)
{
DataProvider
.
getInstance
()
.
getDirection
(
pParent
)
.
subscribe
(
directions 
->
{
view
().
showDirections
(
directions
);
});
}
}
Код 17. Презентер направлений 
Мы создали много различных классов для отображения, теперь пришло 
время создать классы провайдеров контента, и первый из них будет 
посредник между презентерами и интернет провайдером: 
public
class
DataProvider
implements
RemoteProvider 
{
private
static
DataProvider sDataProvider
;
private
final
Context mContext
;
private
RemoteProvider mRemoteProvider
;
private
DataProvider
(
Context pContext
)
{
mContext 
=
pContext
;
mRemoteProvider 
=
new
RemoteDataProviderImpl
();


71 
}
public
static
void
onCreate
(
Context pContext
)
{
sDataProvider 
=
new
DataProvider
(
pContext
);
}
public
static
DataProvider 
getInstance
()
{
return
sDataProvider
;
}
@Override
public
Observable
<
List
<
News
>>
getNews
(
int
pPage
)
{
return
mRemoteProvider
.
getNews
(
pPage
);
}
}
Код 18. Провайдер данных 
В данном случае провайдер принимает роль посредника (фасада) для 
интернет провайдера, которого мы рассмотрим далее: 
public
class
RemoteDataProviderImpl
implements
RemoteProvider 
{
private
final
IntellectService mService
;
public
RemoteDataProviderImpl
()
{
OkHttpClient client 
=
new
OkHttpClient 
.
Builder
()
.
addInterceptor
(
new
HttpLoggingInterceptor
().
setLevel
(
HttpLoggingInterceptor
.
Level
.
BASIC
))
.
build
();
mService 
=
new
Retrofit
.
Builder
()
.
baseUrl
(
BuildConfig
.
SERVER
)
.
client
(
client
)
.
addConverterFactory
(
GsonConverterFactory
.
create
())
.
addCallAdapterFactory
(
RxJavaCallAdapterFactory
.
create
())
.
build
()
.
create
(
IntellectService
.
class
);
}
@Override
public
Observable
<
List
<
News
>>
getNews
(
int
pPage
)
{
return
mService
.
getNews
(
pPage
);
}
}
}
Код 19. Интернет провайдер 


72 
В интернет провайдере создается сервис для доступа к данным в интернете с 
помощью библиотеки Retrofit c применением Gson и RxJava, также 
производиться логирование операций, и применение нового Http клиента 
OkHttp который поддерживает безопасную передачу данных в сети. 
А теперь создадим графический интерфейс пользователя для 
приложения. Макетный редактор (Layout Editor) позволяет создать 
графический интерфейс пользователя путем перетаскивания в окно 
приложения компонентов GUI, таких как Button, TextView, ImageView и др. 
По умолчанию описание макета для шаблона Empty App хранится в XML-
файле с именем activity_main. xml в папке res/layout. Мы воспользуемся 
макетным редактором и окном Component Tree для построения приложения. 
Разметка XML в файле activity_main.xml будет отредактирована только для 
того, чтобы изменить способ размещения компонентов TextView и 
ImageView, используемых в приложении.
Так как экраны устройств Android обладают разными размерами, 
разрешением и плотностью пикселов (DPI, Dot Per Inch), разработчик обычно 
предоставляет изображения с разными разрешениями, а операционная 
система выбирает графику на основании плотности пикселов устройства. По 
этой причине папка res вашего проекта содержит несколько вложенных 
папок, имена которых начинаются с префикса drawable. Например, 
изображения для устройств с плотностью пикселов, близкой к плотности 
экрана телефона Google Nexus 6 (560 dpi) для нашего AVD, будут храниться 
в папке drawable-xxxhdpi.
Задание размеров в пикселах, независимых от плотности (dp или dip), 
позволяет платформе Android автоматически масштабировать графический 
интерфейс пользователя в зависимости от плотности пикселов экрана 
физического устройства. Размер пиксела, независимого от плотности, 
эквивалентен размеру физического пиксела на экране с разрешением 160 dpi 
(точек на дюйм). На экране с разрешением 240 dpi размер пиксела, 


73 
независимого от плотности, будет масштабироваться с коэффициентом 
240/160 (то есть 1,5). Таким образом, компонент, размер которого составляет 
100 пикселов, независимых от плотности, будет масштабирован до размера в 
150 физических пикселов на таком экране. На экране с разрешением 120 
точек на дюйм каждый независимый от плотности пиксел масштабируется с 
коэффициентом 120/160 (то есть 0,75). Значит, 100 независимых от 
плотностей пикселов превратятся на таком экране в 75 физических пикселов. 
Пикселы, независимые от масштабирования, масштабируются так же, как и 
пикселы, независимые от плотности, но их масштаб зависит также и от 
предпочитаемого размера шрифта, выбираемого пользователем (в настройках 
устройства). 



Достарыңызбен бөлісу:
1   ...   18   19   20   21   22   23   24   25   26




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет