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"
|
android:theme="@style/Theme.CausaArcana"
|
||||||
tools:ignore="AllowBackup">
|
tools:ignore="AllowBackup">
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".AppActivity"
|
||||||
android:exported="true">
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN"/>
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
<category android:name="android.intent.category.LAUNCHER"/>
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
|
||||||
android:name=".ArticleActivity"
|
|
||||||
android:exported="true"/>
|
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</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.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.webkit.WebView
|
||||||
|
|
||||||
class ArticleFragment : Fragment() {
|
class ArticleFragment : Fragment() {
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
|
@ -14,4 +15,154 @@ class ArticleFragment : Fragment() {
|
||||||
): View? {
|
): View? {
|
||||||
return inflater.inflate(R.layout.fragment_article, container, false)
|
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.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
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(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
|
@ -14,4 +16,15 @@ class MainFragment : Fragment() {
|
||||||
): View? {
|
): View? {
|
||||||
return inflater.inflate(R.layout.fragment_main, container, false)
|
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