Use fragments
This commit is contained in:
parent
0c1bf9975f
commit
0733811295
9 changed files with 204 additions and 229 deletions
|
@ -14,16 +14,13 @@
|
|||
android:theme="@style/Theme.CausaArcana"
|
||||
tools:ignore="AllowBackup">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:name=".AppActivity"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ArticleActivity"
|
||||
android:exported="true"/>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
|
|
23
app/src/main/java/com/causa_arcana/AppActivity.kt
Normal file
23
app/src/main/java/com/causa_arcana/AppActivity.kt
Normal file
|
@ -0,0 +1,23 @@
|
|||
package com.causa_arcana
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import android.os.Bundle
|
||||
|
||||
class AppActivity : AppCompatActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_app)
|
||||
|
||||
val fragmentTransaction = supportFragmentManager.beginTransaction()
|
||||
fragmentTransaction.replace(R.id.activity_main__frame, MainFragment() {
|
||||
onArticlesListItemClick()
|
||||
})
|
||||
fragmentTransaction.commit()
|
||||
}
|
||||
|
||||
fun onArticlesListItemClick() {
|
||||
val fragmentTransaction = supportFragmentManager.beginTransaction()
|
||||
fragmentTransaction.replace(R.id.activity_main__frame, ArticleFragment())
|
||||
fragmentTransaction.commit()
|
||||
}
|
||||
}
|
|
@ -1,158 +0,0 @@
|
|||
package com.causa_arcana
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import android.os.Bundle
|
||||
import android.webkit.WebView
|
||||
|
||||
class ArticleActivity : AppCompatActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_article)
|
||||
|
||||
val articleWebView: WebView = findViewById(R.id.articleWebView)
|
||||
|
||||
val customWebViewClient = CustomWebViewClient(applicationContext)
|
||||
articleWebView.webViewClient = customWebViewClient
|
||||
|
||||
val htmlGenerator = HtmlGenerator(
|
||||
"Почему сложно писать о передовых информационных технологиях?",
|
||||
contentHtml,
|
||||
)
|
||||
|
||||
articleWebView.loadDataWithBaseURL("https://causa-arcana.com", htmlGenerator.fullHtml(),
|
||||
"text/html", "utf-8", "")
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val contentHtml = """
|
||||
<p>Однажды мы выпустили статью
|
||||
“<a href="../../../2020/06/04/decentralized-vs-distributed.html">Децентрализованные сервисы против распределённых</a>”,
|
||||
где предприняли попытку подтолкнуть читателей к более обдуманному отношению к
|
||||
терминам, таким как “централизованный”, “децентрализованный” и “распределённый”.
|
||||
Это имеет значение не только с точки зрения теоретической информатики и удобства
|
||||
практической деятельности по написанию программного обеспечения. Часто такие
|
||||
термины используются спекулятивно с целью рекламного продвижения продуктов
|
||||
сомнительного качества, таких как некоторые реализации децентрализованных
|
||||
финансов (DeFi; от англ. <em>decentralized finance</em>), а то и вовсе мошеннических
|
||||
предложений.</p>
|
||||
|
||||
<p>Мы не собирались развивать эту тему, так как любая попытка составления подробной
|
||||
классификации обречена на провал. Технологии развиваются быстрее, чем успевают
|
||||
осмысляться, а их сложность не даёт шансов охватить все тонкости. Единственное,
|
||||
что можно сделать – это посоветовать подробнее изучать то, что собираетесь
|
||||
использовать.</p>
|
||||
|
||||
<p>Закономерно, что отвечать на критику представленного нами наброска классификации
|
||||
мы тоже не хотели, потому что она с большой вероятностью была бы справедлива.
|
||||
Любой выбор терминологии имеет как преимущества, позволяя удобнее передавать
|
||||
мысли, так и недостатки, заковывая сознание в слишком строгие рамки. В начале
|
||||
нашей статьи так и было сказано, что мы не ставим целью создание идеальной
|
||||
классификации.</p>
|
||||
|
||||
<p>Однако мы столкнулись, помимо прочего, с обвинениями в невежестве. Это может
|
||||
означать, что мы слишком плохо объяснили нашу мотивацию. Мы хотим исправить эту
|
||||
ошибку, потому что проблемы эпистемологии и языка довольно важны для нас, они
|
||||
касаются мышления о мире вообще, а не только о технологиях.</p>
|
||||
|
||||
<div class="d-flex justify-content-center">
|
||||
<figure class="nice-figure">
|
||||
<img src="https://causa-arcana.com/assets/images/blog/decentralized-vs-distributed-wrong.png"
|
||||
alt='Та самая "неправильная" картинка.'/>
|
||||
<figcaption>
|
||||
Та самая “неправильная” картинка.
|
||||
</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
|
||||
<p>Что же не так с распространёнными вариантами использования упомянутых терминов?
|
||||
Начнём с рассмотрения представленной выше картинки, альтернатива которой была
|
||||
показана в нашей статье. Она часто используется для иллюстрации соответствующих
|
||||
терминов, причём не только в популярных статьях, но и в научных публикациях.
|
||||
Так, в
|
||||
<a href="https://www.researchgate.net/publication/316042146_A_Survey_on_Trust_Computation_in_the_Internet_of_Things">одной</a>
|
||||
из рассмотренных нами публикаций децентрализованная система определяется в том
|
||||
числе как система без единой точки отказа, и тут же приводится эта картинка.
|
||||
Если присмотреться к ней, то в примере децентрализованной системы есть один
|
||||
узел, при удалении которого части системы больше не будут связаны. Возможно, это
|
||||
не является противоречием при каком-то экзотическом определении требований к
|
||||
системе, смысла узлов и связей между ними, но рассматриваемая публикация не
|
||||
содержит ничего подобного.</p>
|
||||
|
||||
<p>Рассматриваемая выше картинка ведёт своё происхождение из
|
||||
<a href="https://www.rand.org/content/dam/rand/pubs/research_memoranda/2006/RM3420.pdf">книги</a>
|
||||
1964 года “On Distributed Communications Networks” (автор Paul Baran). Там
|
||||
даётся определение децентрализованной сети как такой, где отказ центрального
|
||||
узла не приводит к полной потере связности между всеми узлами, а лишь
|
||||
некоторыми. Это было довольно актуально в то время, поскольку количество
|
||||
информации, передаваемой между отдалёнными узлами больших сетей было невелико, а
|
||||
связность внутри организаций могла быть гораздо важнее, чем между ними. Чего
|
||||
нельзя сказать про наше время. Кроме того, автор рассматривает довольно узкий
|
||||
вопрос сетевых топологий, то есть физической связности. У современных же систем
|
||||
есть множество других свойств, таких как доверие между узлами или хранение
|
||||
данных на разных узлах.</p>
|
||||
|
||||
<div class="d-flex justify-content-center">
|
||||
<figure class="nice-figure">
|
||||
<img src="https://causa-arcana.com/assets/images/blog/network-topologies.png"
|
||||
alt="Классификация сетевых топологий. Возможно, тоже неправильная или неполная."/>
|
||||
<figcaption>
|
||||
Классификация сетевых топологий. Возможно, тоже неправильная или неполная.
|
||||
</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
|
||||
<p>Попытка создать современную классификацию была предпринята, например, в
|
||||
<a href="https://journals.sagepub.com/doi/full/10.1177/2631787720977052">работе</a> 2020
|
||||
года “Decentralized vs. Distributed Organization: Blockchain, Machine Learning
|
||||
and the Future of the Digital Platform”. Там предлагается воспринимать
|
||||
децентрализацию как рассеивание коммуникации, а распределённость как рассеивание
|
||||
принятия решений. Это интересная работа с историческим обзором, собственным
|
||||
теоретическим аппаратом и масштабными выводами, в том числе
|
||||
социально-политического характера. Однако её результаты противоречат устоявшейся
|
||||
терминологии, а также являются слишком сложными, чтобы их можно было корректно
|
||||
применять. Так, в добавок к существующим трём терминам там вводится ещё один –
|
||||
концентрированные системы. Авторы текстов с тремя-то не справляются.</p>
|
||||
|
||||
<p>Похожий подход предлагает и создатель криптовалюты Ethereum Виталик Бутерин в
|
||||
<a href="https://medium.com/@VitalikButerin/the-meaning-of-decentralization-a0c92b76a274">статье</a>
|
||||
“The Meaning of Decentralization”. Он особенно подчёркивает, что каждая система
|
||||
может классифицироваться тем или иным образом по каждому из трёх различных
|
||||
критериев:</p>
|
||||
|
||||
<ul>
|
||||
<li>Архитектурная децентрализованность – как много узлов в системе? Как много из
|
||||
них могут выйти из строя, не вызывая отказа всей системы?</li>
|
||||
<li>Политическая децентрализованность – как много людей или организаций
|
||||
контролируют систему?</li>
|
||||
<li>Логическая децентрализованность – являются ли интерфейсы и структуры данных
|
||||
системы единым монолитным объектом (как в блокчейне) или нет (как в федеративных
|
||||
социальных сетях)?</li>
|
||||
</ul>
|
||||
|
||||
<p>Мы согласны, что соответствие системы каким-то критериям зависит от целей,
|
||||
которые ставятся теми, кто её обсуждает, но явное введение таких критериев,
|
||||
опять же, слишком усложняет классификацию, оставляя её потенциально неполной.</p>
|
||||
|
||||
<p>Главным возражением на нашу статью было противоречие (только кажущееся) нашего
|
||||
определения распределённой системы наиболее распространённому, согласно которому
|
||||
это коллекция узлов, которая выглядит для пользователей как единая когерентная
|
||||
система. Это определение даёт сам Эндрю Таненбаум в книге “Distributed Systems:
|
||||
Principles and Paradigms”. Наше определение, возможно, более широкое, но оно
|
||||
точно полностью включает указанное. Есть, например, распределённые базы данных,
|
||||
управление которыми осуществляет одна инстанция, принимающие некоторые
|
||||
административные решения. Однако необходимость наличия администратора в случае
|
||||
баз данных не вызывает никаких сомнений и при обсуждении может не упоминаться.
|
||||
Большую же часть времени они работают автономно, без какого-либо единого центра
|
||||
принятия решений, и принятие решений действительно осуществляется всей сетью с
|
||||
помощью алгоритмов распределённого консенсуса, таких как Paxos или Raft.</p>
|
||||
|
||||
<p>Таким образом, удобство классификаций и определений сильно зависит от того,
|
||||
какие задачи необходимо решать. Как мы уже писали в статье
|
||||
“<a href="../../07/19/capitalization-of-internet.html">Почему слово Интернет пишется с прописной буквы?</a>”,
|
||||
мы не указываем вам, как и что говорить, лишь помогаем думать эффективнее и не
|
||||
попадаться в ментальные ловушки, расставленные теми, кто на самом деле хочет вас
|
||||
контролировать. Это непростая задача в столь быстро меняющеся мире, но благодаря
|
||||
вашей поддержке и обратной связи мы сможем выполнять её более эффективно.</p>
|
||||
"""
|
||||
}
|
||||
}
|
|
@ -5,6 +5,7 @@ import androidx.fragment.app.Fragment
|
|||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.webkit.WebView
|
||||
|
||||
class ArticleFragment : Fragment() {
|
||||
override fun onCreateView(
|
||||
|
@ -14,4 +15,154 @@ class ArticleFragment : Fragment() {
|
|||
): View? {
|
||||
return inflater.inflate(R.layout.fragment_article, container, false)
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
val articleWebView: WebView = view.findViewById(R.id.fragment_article__article_web_view)
|
||||
|
||||
val customWebViewClient = CustomWebViewClient(requireContext())
|
||||
articleWebView.webViewClient = customWebViewClient
|
||||
|
||||
val htmlGenerator = HtmlGenerator(
|
||||
"Почему сложно писать о передовых информационных технологиях?",
|
||||
contentHtml,
|
||||
)
|
||||
|
||||
articleWebView.loadDataWithBaseURL("https://causa-arcana.com", htmlGenerator.fullHtml(),
|
||||
"text/html", "utf-8", "")
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val contentHtml = """
|
||||
<p>Однажды мы выпустили статью
|
||||
“<a href="../../../2020/06/04/decentralized-vs-distributed.html">Децентрализованные сервисы против распределённых</a>”,
|
||||
где предприняли попытку подтолкнуть читателей к более обдуманному отношению к
|
||||
терминам, таким как “централизованный”, “децентрализованный” и “распределённый”.
|
||||
Это имеет значение не только с точки зрения теоретической информатики и удобства
|
||||
практической деятельности по написанию программного обеспечения. Часто такие
|
||||
термины используются спекулятивно с целью рекламного продвижения продуктов
|
||||
сомнительного качества, таких как некоторые реализации децентрализованных
|
||||
финансов (DeFi; от англ. <em>decentralized finance</em>), а то и вовсе мошеннических
|
||||
предложений.</p>
|
||||
|
||||
<p>Мы не собирались развивать эту тему, так как любая попытка составления подробной
|
||||
классификации обречена на провал. Технологии развиваются быстрее, чем успевают
|
||||
осмысляться, а их сложность не даёт шансов охватить все тонкости. Единственное,
|
||||
что можно сделать – это посоветовать подробнее изучать то, что собираетесь
|
||||
использовать.</p>
|
||||
|
||||
<p>Закономерно, что отвечать на критику представленного нами наброска классификации
|
||||
мы тоже не хотели, потому что она с большой вероятностью была бы справедлива.
|
||||
Любой выбор терминологии имеет как преимущества, позволяя удобнее передавать
|
||||
мысли, так и недостатки, заковывая сознание в слишком строгие рамки. В начале
|
||||
нашей статьи так и было сказано, что мы не ставим целью создание идеальной
|
||||
классификации.</p>
|
||||
|
||||
<p>Однако мы столкнулись, помимо прочего, с обвинениями в невежестве. Это может
|
||||
означать, что мы слишком плохо объяснили нашу мотивацию. Мы хотим исправить эту
|
||||
ошибку, потому что проблемы эпистемологии и языка довольно важны для нас, они
|
||||
касаются мышления о мире вообще, а не только о технологиях.</p>
|
||||
|
||||
<div class="d-flex justify-content-center">
|
||||
<figure class="nice-figure">
|
||||
<img src="https://causa-arcana.com/assets/images/blog/decentralized-vs-distributed-wrong.png"
|
||||
alt='Та самая "неправильная" картинка.'/>
|
||||
<figcaption>
|
||||
Та самая “неправильная” картинка.
|
||||
</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
|
||||
<p>Что же не так с распространёнными вариантами использования упомянутых терминов?
|
||||
Начнём с рассмотрения представленной выше картинки, альтернатива которой была
|
||||
показана в нашей статье. Она часто используется для иллюстрации соответствующих
|
||||
терминов, причём не только в популярных статьях, но и в научных публикациях.
|
||||
Так, в
|
||||
<a href="https://www.researchgate.net/publication/316042146_A_Survey_on_Trust_Computation_in_the_Internet_of_Things">одной</a>
|
||||
из рассмотренных нами публикаций децентрализованная система определяется в том
|
||||
числе как система без единой точки отказа, и тут же приводится эта картинка.
|
||||
Если присмотреться к ней, то в примере децентрализованной системы есть один
|
||||
узел, при удалении которого части системы больше не будут связаны. Возможно, это
|
||||
не является противоречием при каком-то экзотическом определении требований к
|
||||
системе, смысла узлов и связей между ними, но рассматриваемая публикация не
|
||||
содержит ничего подобного.</p>
|
||||
|
||||
<p>Рассматриваемая выше картинка ведёт своё происхождение из
|
||||
<a href="https://www.rand.org/content/dam/rand/pubs/research_memoranda/2006/RM3420.pdf">книги</a>
|
||||
1964 года “On Distributed Communications Networks” (автор Paul Baran). Там
|
||||
даётся определение децентрализованной сети как такой, где отказ центрального
|
||||
узла не приводит к полной потере связности между всеми узлами, а лишь
|
||||
некоторыми. Это было довольно актуально в то время, поскольку количество
|
||||
информации, передаваемой между отдалёнными узлами больших сетей было невелико, а
|
||||
связность внутри организаций могла быть гораздо важнее, чем между ними. Чего
|
||||
нельзя сказать про наше время. Кроме того, автор рассматривает довольно узкий
|
||||
вопрос сетевых топологий, то есть физической связности. У современных же систем
|
||||
есть множество других свойств, таких как доверие между узлами или хранение
|
||||
данных на разных узлах.</p>
|
||||
|
||||
<div class="d-flex justify-content-center">
|
||||
<figure class="nice-figure">
|
||||
<img src="https://causa-arcana.com/assets/images/blog/network-topologies.png"
|
||||
alt="Классификация сетевых топологий. Возможно, тоже неправильная или неполная."/>
|
||||
<figcaption>
|
||||
Классификация сетевых топологий. Возможно, тоже неправильная или неполная.
|
||||
</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
|
||||
<p>Попытка создать современную классификацию была предпринята, например, в
|
||||
<a href="https://journals.sagepub.com/doi/full/10.1177/2631787720977052">работе</a> 2020
|
||||
года “Decentralized vs. Distributed Organization: Blockchain, Machine Learning
|
||||
and the Future of the Digital Platform”. Там предлагается воспринимать
|
||||
децентрализацию как рассеивание коммуникации, а распределённость как рассеивание
|
||||
принятия решений. Это интересная работа с историческим обзором, собственным
|
||||
теоретическим аппаратом и масштабными выводами, в том числе
|
||||
социально-политического характера. Однако её результаты противоречат устоявшейся
|
||||
терминологии, а также являются слишком сложными, чтобы их можно было корректно
|
||||
применять. Так, в добавок к существующим трём терминам там вводится ещё один –
|
||||
концентрированные системы. Авторы текстов с тремя-то не справляются.</p>
|
||||
|
||||
<p>Похожий подход предлагает и создатель криптовалюты Ethereum Виталик Бутерин в
|
||||
<a href="https://medium.com/@VitalikButerin/the-meaning-of-decentralization-a0c92b76a274">статье</a>
|
||||
“The Meaning of Decentralization”. Он особенно подчёркивает, что каждая система
|
||||
может классифицироваться тем или иным образом по каждому из трёх различных
|
||||
критериев:</p>
|
||||
|
||||
<ul>
|
||||
<li>Архитектурная децентрализованность – как много узлов в системе? Как много из
|
||||
них могут выйти из строя, не вызывая отказа всей системы?</li>
|
||||
<li>Политическая децентрализованность – как много людей или организаций
|
||||
контролируют систему?</li>
|
||||
<li>Логическая децентрализованность – являются ли интерфейсы и структуры данных
|
||||
системы единым монолитным объектом (как в блокчейне) или нет (как в федеративных
|
||||
социальных сетях)?</li>
|
||||
</ul>
|
||||
|
||||
<p>Мы согласны, что соответствие системы каким-то критериям зависит от целей,
|
||||
которые ставятся теми, кто её обсуждает, но явное введение таких критериев,
|
||||
опять же, слишком усложняет классификацию, оставляя её потенциально неполной.</p>
|
||||
|
||||
<p>Главным возражением на нашу статью было противоречие (только кажущееся) нашего
|
||||
определения распределённой системы наиболее распространённому, согласно которому
|
||||
это коллекция узлов, которая выглядит для пользователей как единая когерентная
|
||||
система. Это определение даёт сам Эндрю Таненбаум в книге “Distributed Systems:
|
||||
Principles and Paradigms”. Наше определение, возможно, более широкое, но оно
|
||||
точно полностью включает указанное. Есть, например, распределённые базы данных,
|
||||
управление которыми осуществляет одна инстанция, принимающие некоторые
|
||||
административные решения. Однако необходимость наличия администратора в случае
|
||||
баз данных не вызывает никаких сомнений и при обсуждении может не упоминаться.
|
||||
Большую же часть времени они работают автономно, без какого-либо единого центра
|
||||
принятия решений, и принятие решений действительно осуществляется всей сетью с
|
||||
помощью алгоритмов распределённого консенсуса, таких как Paxos или Raft.</p>
|
||||
|
||||
<p>Таким образом, удобство классификаций и определений сильно зависит от того,
|
||||
какие задачи необходимо решать. Как мы уже писали в статье
|
||||
“<a href="../../07/19/capitalization-of-internet.html">Почему слово Интернет пишется с прописной буквы?</a>”,
|
||||
мы не указываем вам, как и что говорить, лишь помогаем думать эффективнее и не
|
||||
попадаться в ментальные ловушки, расставленные теми, кто на самом деле хочет вас
|
||||
контролировать. Это непростая задача в столь быстро меняющеся мире, но благодаря
|
||||
вашей поддержке и обратной связи мы сможем выполнять её более эффективно.</p>
|
||||
"""
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,26 +0,0 @@
|
|||
package com.causa_arcana
|
||||
|
||||
import android.content.Intent
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import android.os.Bundle
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_main)
|
||||
|
||||
val articlesListRecyclerView: RecyclerView =
|
||||
findViewById(R.id.activity_main__articles_list_rv)
|
||||
articlesListRecyclerView.layoutManager = LinearLayoutManager(this)
|
||||
articlesListRecyclerView.adapter = ArticlesListRecyclerViewAdapter {
|
||||
onArticlesListItemClick()
|
||||
}
|
||||
}
|
||||
|
||||
private fun onArticlesListItemClick() {
|
||||
val intent = Intent(this, ArticleActivity::class.java)
|
||||
startActivity(intent)
|
||||
}
|
||||
}
|
|
@ -5,8 +5,10 @@ import androidx.fragment.app.Fragment
|
|||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
||||
class MainFragment : Fragment() {
|
||||
class MainFragment(private val onArticlesListItemClick: () -> Unit) : Fragment() {
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
|
@ -14,4 +16,15 @@ class MainFragment : Fragment() {
|
|||
): View? {
|
||||
return inflater.inflate(R.layout.fragment_main, container, false)
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
val articlesListRecyclerView: RecyclerView =
|
||||
view.findViewById(R.id.fragment_main__articles_list_rv)
|
||||
articlesListRecyclerView.layoutManager = LinearLayoutManager(requireContext())
|
||||
articlesListRecyclerView.adapter = ArticlesListRecyclerViewAdapter {
|
||||
onArticlesListItemClick()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
15
app/src/main/res/layout/activity_app.xml
Normal file
15
app/src/main/res/layout/activity_app.xml
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".AppActivity">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/activity_main__frame"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -1,20 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".ArticleActivity">
|
||||
|
||||
<WebView
|
||||
android:id="@+id/articleWebView"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_bias="0.336"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -1,20 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".MainActivity">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/activity_main__articles_list_rv"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
tools:listitem="@layout/rvitem_article_card"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
Reference in a new issue