您能告诉我如何在 kotlin 中将字符串“2022-07-13T07:58:57.835201Z”转换为 07/13/2022 07:58 格式吗?这可以通过 SimpleDateFormat 类或 String 类的方法来完成吗?
Kurtca Bain's questions
是否可以在 Android 应用程序中将标记从地图上的一个位置移动到另一个位置,如果可以,如何实现?
我正在 kotlin 上为 Android 编写一个应用程序“天气”。应用程序架构 - MVVM。我使用 Yandex API 获取天气数据。有 dto 类 ForecastModel 和 FactModel。FactModel 类的条件字段以字符串格式(“部分多云”、“连续大雨”等)从服务器接收有关天气状况的数据。我想将这些字符串本地化为俄语和英语。为此,我创建了 getConditionLocalized() 方法并将字符串放入资源中。但最终,它生成的不是字符串,而是数字。我知道常量和 getConditionLocalized() 函数很可能都必须在另一个类中,并且很可能需要通过 resources.getString(R.string.....) 方法调用它们,但该方法不可用在这堂课中。唯一的问题是,将所有这些放在哪个班级?在存储库中,查看模型或其他?您能告诉我如何根据 MVVM 模型正确实现它吗?
ForecastModel 和 FactModel 类的代码:
import com.company.myweatherapp.R
const val CLEAR = "clear"
const val PARTLY_CLOUDY = "partly-cloudy"
const val CLOUDY = "cloudy"
const val OVERCAST = "overcast"
const val DRIZZLE = "drizzle"
const val LIGHT_RAIN = "light-rain"
const val RAIN = "rain"
const val MODERATE_RAIN = "moderate-rain"
const val HEAVY_RAIN = "heavy-rain"
const val CONTINUOUS_HEAVY_RAIN = "continuous-heavy-rain"
const val SHOWERS = "showers"
const val WET_SNOW = "wet-snow"
const val LIGHT_SNOW = "light-snow"
const val SNOW = "snow"
const val SNOW_SHOWERS = "snow-showers"
const val HAIL = "hail"
const val THUNDERSTORM = "thunderstorm"
const val THUNDERSTORM_WITH_RAIN = "thunderstorm-with-rain"
const val THUNDERSTORM_WITH_HAIL = "thunderstorm-with-hail"
data class ForecastModel(
val fact: FactModel?,
val geo_object: GeoObjectModel?
)
data class FactModel(
val temp: Int,
val icon: String,
val condition: String
) {
fun getConditionIcon(): String {
return "https://yastatic.net/weather/i/icons/funky/dark/$icon.svg"
}
fun getConditionLocalized(): String {
return when (condition) {
CLEAR -> R.string.clear_conditions_text.toString()
PARTLY_CLOUDY -> R.string.partly_cloudy_conditions_text.toString()
CLOUDY -> R.string.cloudy_conditions_text.toString()
OVERCAST -> R.string.overcast_conditions_text.toString()
DRIZZLE -> R.string.drizzle_conditions_text.toString()
LIGHT_RAIN -> R.string.light_rain_conditions_text.toString()
RAIN -> R.string.rain_conditions_text.toString()
MODERATE_RAIN -> R.string.moderate_rain_conditions_text.toString()
HEAVY_RAIN -> R.string.heavy_rain_conditions_text.toString()
CONTINUOUS_HEAVY_RAIN -> R.string.continuous_heavy_rain_conditions_text.toString()
SHOWERS -> R.string.showers_conditions_text.toString()
WET_SNOW -> R.string.wet_snow_conditions_text.toString()
LIGHT_SNOW -> R.string.light_snow_conditions_text.toString()
SNOW -> R.string.snow_conditions_text.toString()
SNOW_SHOWERS -> R.string.snow_showers_conditions_text.toString()
HAIL -> R.string.hail_conditions_text.toString()
THUNDERSTORM -> R.string.thunderstorm_conditions_text.toString()
THUNDERSTORM_WITH_RAIN -> R.string.thunderstorm_with_rain_conditions_text.toString()
THUNDERSTORM_WITH_HAIL -> R.string.thunderstorm_with_hail_conditions_text.toString()
else -> condition
}
}
}
data class GeoObjectModel(val locality: LocalityModel)
data class LocalityModel(val name: String)```
我正在学习 Android 的 swipeRefreshLayout 组件。它有一个 setColorSchemeResources() 方法来改变加载轮的颜色。在 MVVM (kotlin) 项目中在哪个类中使用此方法?直接在视图中规定这个方法还是在viewModel中设置颜色,然后莫名其妙的上报给视图?
遇到这样一个问题:在将 Android Studio 更新到“北极狐”版本后,当按下运行按钮 (Shift + f10) 时,应用程序停止重建。也就是说,如果您对项目代码进行一些更改并在设备上运行应用程序,应用程序会启动,但不会发生任何更改。您必须每次都清理(清理项目)并手动重建项目(重建项目),然后才能运行应用程序。告诉我,谁已经遇到过这样的问题?
我有一个描述如何使用 SharedPreferences 的类:
class TextPreferences(context: Context) {
private val PREFS_FILENAME = TextPreferences::class.java.simpleName
val TEXT = "TEXT"
private var pref: SharedPreferences? = null
fun getText(): String? {
return pref?.getString(TEXT, null)
}
fun setText(res: String) {
val editor = pref?.edit()
editor?.putString(TEXT, res)
editor?.apply()
}
init {
pref = context.getSharedPreferences(
PREFS_FILENAME,
Context.MODE_PRIVATE
)
}
}
在其中一个类中,我使用 setText() 方法设置 Preferences 的值,而在其余类(大约有十个)中,我需要使用 getText() 方法检索该值。
检索 TextPreferences 值的片段代码:
class MyFragment: BaseFragment() {
private var prefs: TextPreferences? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
prefs = TextPreferences(requireActivity().baseContext)
val someString = prefs?.getText()
}
}
问题是,我是否正确使用首选项?在每个类中创建一个 TextPreferences 类型的对象以便从中提取值是否正确?如果你需要在 1000 个类中提取一个值,那么你将不得不创建 1000 个这样的对象。也许我没有正确理解某些东西?
我正在用 Kotlin 为 Android 编写一个应用程序。请告诉我,我如何将活动中的链接(假设通过按下按钮)发送给电报联系人列表中的某人?我知道这是通过 Intent 完成的,但我不明白具体是怎么做的。
我正在使用 kotlin 编写一个 android 应用程序。假设应用程序只有一个屏幕,其中只包含一个 TextView。您需要在应用程序启动时随机生成一个字母数字代码(11 个字符)并将其放置在此 TextView 中。如何做到这一点,请告诉我。
在应用程序中,我将库从 yandex.cash 更新为 yookassa。
在 build.gradle 中的依赖项中添加:
implementation 'ru.yoo.sdk.kassa.payments:yookassa-android-sdk:5.0.3'
implementation "ru.yoo.sdk.auth:auth:1.0.39"
也就是说,一切,如官方文档中所示。
尝试运行应用程序时,会出现以下错误:
C:\Users\Alex.gradle\caches\transforms-2\files-2.1\jetified-auth-1.0.39\AndroidManifest.xml:14:9-18:58: AAPT: error: resource style/Theme.Yoo (又名 com.alex.example:style/Theme.Yoo) 未找到。
它可以与什么连接?
有一个Operation接口,代码如下:
interface Operation {
fun getResult(param1: Double, param2: Double): Double
}
在 MainActivity 我们创建一个内部匿名类:
var operation: Operation = object : Operation {
override fun getResult(param1: Double, param2: Double): Double {
return param1*param2
}
}
然后将 getResult() 方法返回的值打印到控制台:
println("${operation.getResult(2.0, 2.0)}")
是否可以使用 lambda 表达式而不是匿名类,如果可以,它在代码中会是什么样子?
告诉我,是否可以在 kotlin 中以编程方式获取 sp 中 TextView 的尺寸(以缩放像素为单位)?您需要获取 TextView 的大小,将其传递给 SharedPreferences 并在另一个 TextView 的另一个屏幕上,提取此大小并将其分配给它(另一个 TextView)。我使用 textView.textSize 方法获得了 TextView 的大小(在日志中它说大小是 140.0,尽管在 xml 文件中这个 textView 的大小是 70sp)。我使用首选项将此大小分配给另一个 TextView,但结果是 2 倍。Java 有一个 getScaledTextSize 方法,它返回 sp 中的大小。我在Kotlin上没有找到这样的方法,只有textSize方法(java中的类比getTextSize()),它返回的大小单位是px。我认为这就是问题所在,尽管我可能是错的。
我正在用 kotlin 编写一个简单的程序。我正在创建一个带有一个屏幕的应用程序。屏幕颜色为白色,文本字段有不同的颜色和大小。屏幕上还有 2 个按钮:刷新和回滚。当点击 Refresh 时,背景颜色变为蓝色,TextView 的颜色和大小也随之改变。当您单击回滚时,所有内容都应回滚到其原始状态(白屏,文本字段与程序启动时相同)。请告诉我,我怎样才能在代码中获取屏幕的背景颜色(背景),假设 MainActivity?想法是这样的:我在程序启动时获取背景颜色,然后通过 SharedPreferences 传递它,这样当我单击回滚按钮时,我设置相同的背景颜色。屏幕的根元素称为 root_srl。尝试了类似 root_srl.getBackground() 但没有找到类似的东西
我正在编写一个简单的浏览器。我不知道如何将状态保存WebView在MainActivity. 首次加载应用程序时,会打开 google.com 起始页。假设我在搜索栏中写了一些东西。更改屏幕方向后如何保存状态WebView,使搜索栏中的文字不消失?代码MainActivity:
public class MainActivity extends BaseActivity {
@BindView(R.id.webView)
WebView webView;
@Inject
UrlPreferences prefs;
MyWebViewClient webViewClient = new MyWebViewClient();
@Override
protected void onCreate(Bundle savedInstanceState) {
App.INSTANCE.getAppComponent().inject(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initButterKnife();
webView.getSettings().setJavaScriptEnabled(true);
if (savedInstanceState == null) {
webView.loadUrl("https://google.com");
} else {
webView.loadUrl(prefs.getUrl());
}
webView.setWebViewClient(webViewClient);
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
prefs.setUrl(webView.getUrl());
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
我使用 Api yandex-geocoder。在服务器的响应中,一个带有坐标的字符串到达,其中首先表示经度(lon),然后是纬度(lat)。例如:“36.587223 50.59566”。我需要从String类型中提取这2个值,放入double类型并交换它们,这样第一个值进入lat变量,第二个进入lon变量。请告诉我,这怎么办?
我与 Api Yandex-Weather 合作。来自服务器的响应中的字符串日期字段接收格式为 26/03/2020 的天气预报日期。使用 getDate() 方法,我检索它。如何格式化它,以便屏幕上显示一周中的几天(星期三,星期四......)而不是日/月/年格式的日期?
当您单击 Android Studio 中的终端选项卡时,控制台窗口会出现片刻然后消失。您必须使用 Windows 的标准命令行,这会带来一些不便。告诉我,我该如何解决这个问题?更新 Android Studio 后出现此问题。现在最新版本的AS和Windows 10都安装好了(听说这个版本的Windows经常会出现AS中终端的问题)。
有一个类模型CountryModel。它有 2 个字段:id和title.
public class CountryModel {
private int id;
private String title;
public CountryModel(int id, String title) {
this.id = id;
this.title = title;
}
public int getId() {
return id;
}
public String getTitle() {
return title;
}
}
我创建了一个models类型列表CountryModel来显示国家列表。
public CountryModelsAdapter() {
List<CountryModel> models = new ArrayList<>();
models.add(new CountryModel(TYPE_RUSSIA, "Россия"));
models.add(new CountryModel(TYPE_GERMANY, "Германия"));
models.add(new CountryModel(TYPE_FRANCE, "Франция"));
models.add(new CountryModel(TYPE_ITALY, "Италия"));
setModels(models);
}
如何models按字段对列表进行排序,title以便屏幕上的国家按字母顺序显示(德国-意大利-俄罗斯-法国)?
我与 Api Yandex-weather 合作。服务器响应中的日期格式为“yyyy-mm-dd”。我使用 getDate() 方法得到它。如何格式化此日期,使其在应用程序屏幕上显示为“dd-mm-yyyy”?
如何处理方法中重复单击菜单项onOptionsItemSelected(MenuItem item)?
所以当你第一次点击一个菜单项时,会执行一个动作,而第二个和后续的动作会做其他事情吗?