应用程序 - 自己的聊天。
当您尝试从剪贴板粘贴图片时如何捕获事件?
让 BasicTextField 本身保持为空。
最主要的是捕获事件并获取 Uri(获取 Uri 没有问题)
请告诉我在哪个方向挖掘以及这是否可能。
ps 根据电报判断 - 这是可能的。
Wlad's questions
有这样的代码:
@Composable
fun FragmentA(navController: NavController) {
val vm = viewModel(VM::class.java)
val a by vm.a.observeAsState("")
val b by vm.b.observeAsState("")
Column {
MyRandomBox()
MyBox(a)
MyBox2(b)
}
}
@Composable
fun MyRandomBox() {
Text(text = UUID.randomUUID().toString())
}
@Composable
fun MyBox(text: String) {
Box {
Log.e("!!!", "box-1")
Text(text = text)
}
}
@Composable
fun MyBox2(text: String) {
Box {
Log.e("!!!", "box-2")
Text(text = text)
}
}
class VM : ViewModel() {
val a = MutableLiveData<String>()
val b = MutableLiveData<String>()
init {
viewModelScope.launch {
(0..100).forEach {
a.value = "a-$it"
delay(1000)
b.value = "b-$it"
delay(1000)
}
}
}
}
它工作得很好:每秒 1 个 LiveDats 发生变化,并且只有发生变化的 Box 才会显示在日志中。
第一个文本中的值,因为它是在启动时随机创建的,所以仍然挂起(它不会再次随机化)。
但是如果你稍微改变一下代码,就像这样:
Column {
// MyRandomBox()
Text(text = UUID.randomUUID().toString())
MyBox(a)
MyBox2(b)
}
那么现在当您更改任何 LiveDates 时,第一个文本中的文本将再次随机化
为什么如果您将这段代码封装在自己的代码中,Composable-функцию
一切都会按其应有的方式工作,但如果没有它,一切都不会?(就好像视图是从头开始重新创建的)
UPD
以下行为也不清楚:
取消了操作onClick
@Composable
fun FragmentA(navController: NavController) {
val vm = viewModel(VM::class.java)
val a by vm.a.observeAsState("")
val b by vm.b.observeAsState("")
Column {
MyRandomBox()
MyBox(a) {
vm.rnd()
}
MyBox2(b)
}
}
@Composable
fun MyBox(text: String, onClick: () -> Unit) {
Box {
Log.e("!!!", "box-1")
Text(text = text,
modifier = Modifier
.clickable {
onClick()
}
)
}
}
LOG
10:04:12.770 E box-1
10:04:13.771 E box-1
10:04:13.772 E box-2
10:04:14.786 E box-1
10:04:15.787 E box-1
10:04:15.790 E box-2
10:04:16.786 E box-1
10:04:17.786 E box-1
10:04:17.787 E box-2
当它改变时,a
它会被记录box-1
当b
它改变时,它会被记录box-1
+box-2
但如果你用它替换它vm.rnd()
,Log.e()
一切都会按预期工作。
为什么会发生这种情况?
有一个单独的模块 AndroidLibary
在其中我创建一个自定义视图
我创建自定义属性并给它们默认值
<declare-styleable name="TestView">
<attr name="_name_TestView" format="string" />
<attr name="_info_TestView" format="string" />
</declare-styleable>
<style name="TestView">
<item name="_name_TestView">test</item>
<item name="_info_TestView">info</item>
</style>
在代码中获取属性
context.theme.obtainStyledAttributes(
attrs,
R.styleable.TestView,
0,
0
)
我将模块连接到项目,
我想更改项目 (而不是模块)的主题,以便默认属性_name_TestView
为customTest
. 怎么做?
查看代码
class TestView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null
) : FrameLayout(context, attrs, R.attr.TestViewAtr) {
init {
inflate(context, R.layout.test_view, this)
}
private val xml =
context.theme.obtainStyledAttributes(
attrs,
R.styleable.TestView,
0,
0
)
val button by lazy { findViewById<Button>(R.id.testButton) }
val textView by lazy { findViewById<TextView>(R.id.textView) }
var text: String = xml.getStringOrThrow(R.styleable.TestView__name_TestView)
.apply { text = this }
set(value) {
field = value
button.setText(field)
}
var helpText: String = xml.getStringOrThrow(R.styleable.TestView__info_TestView)
.apply { helpText = this }
set(value) {
field = value
textView.text = field
}
private val closeXml = { xml.recycle() }.apply { this.invoke() }
}
有一个文本掩码:xxx/13xx/xxx
有一个文本:222/1300/777
我怎样才能得到文本22200777
?
.replace("/13", "")
在一个例子上歪曲地工作222/1300/135
有一个远程桌面(通过 RDP 连接)。
有一台家用电脑。拥有安卓设备。
我怎样才能扔掉手机以将其远程连接到 Android-Studio?
可以扔闪存驱动器、磁盘等。
但是当我选择手机时,什么也没有发生。
我有一个奇怪的错误,我无法弄清楚问题是什么。
代码的要点:
我有 2 LiveData
。
1 - 来自互联网的数据。要么他们是,要么他们是null
。
2 -Boolean
工作状态。真实 - 在工作开始时。false
- 成功完成后。null
——如果资料太来自网上null
。
suspend fun getGms(platform: String, nickName: String) = withContext(Dispatchers.Default) {
loadFlag.postValue(true)
gmsInet.postValue(getGmsFromInet(platform, nickName))
if (loadFlag.value != null) loadFlag.postValue(false)
}
private suspend fun getGmsFromInet(platform: String, nickName: String): _GamerStats? = withContext(Dispatchers.IO) {
val ret: _GamerStats? = remoteModel.getGmsFromInet(platform, nickName)
if (ret == null) loadFlag.postValue(null)
return@withContext ret
}
问题出在这条线上, if (ret == null) loadFlag.postValue(null)
我在日志中看到它来ret
了,真相来了null
,但标志loadFlag
没有改变。它变成false
.
如果我至少延迟1 мс
- 那么一切都会正常进行。
if (ret == null) loadFlag.postValue(null)
delay(1)
return@withContext ret
与不同的调度员一起玩 - 没有区别。
就好像该行loadFlag.postValue(null)
与其余行异步执行一样。
无法弄清楚我的错误在哪里或我错过了什么
我改变了类结构中的一些东西。当然,房间开始发誓“现有的数据库结构与新的不匹配”。
从手机中删除应用程序。重新启动。清除项目缓存。重建 Gradle。
一切都无济于事。
在模拟器上一切正常。只需卸载该应用程序,一切正常。
但在真正的手机上它没有帮助。
三星 Galaxy A12
还需要做什么才能从手机中完全删除应用程序?
请帮我弄清楚如何在 Room 中工作,List<MyClass>
我有一个大型 JSON,分为 30 多个嵌套类。
我从互联网收集数据。一切都很完美。
我正在尝试将此数据写入 Room。
为了将嵌套类写入数据库,我在它们上使用注释@Embedded
但在某些类中,我的参数不仅来自类实例,还来自数组
@SerializedName("availableSegments")
var availableSegments: List<AvailableSegment>
如果我尝试挂@Embedded
在这样的参数上,它会给出一个错误
Entities and POJOs must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type).
类本身AvailableSegment
包含其他“自定义”参数(不是原始 String、Int 等)。
更新!!!有条件...
我有 3 节课:
@Entity(tableName = "car_table")
data class Car(
@Embedded var zerka: Zerkala,
@Embedded var side: Sidenia,
@PrimaryKey(autoGenerate = true) var primKey: Int = 0
)
data class Zerkala(
var kolvo: Int
)
data class Sidenia(
var color: String
)
像这样 - 一切正常。
但是如果在主类中我将任何参数更改为数组:
@Entity(tableName = "car_table")
data class Car(
@Embedded var zerka: Zerkala,
@Embedded var side: List<Sidenia>,
@PrimaryKey(autoGenerate = true) var primKey: Int = 0
)
没有任何作用...
Entities and POJOs must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type). - java.util.ListD:\Program\AndroidProject\TesListRoom\app\build\tmp\kapt3\stubs\debug\by\wlad\koshelev\teslistroom\CarDataBaase.java:7: warning: Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide `room.schemaLocation` annotation processor argument OR set exportSchema to false.
有这样一个任务:
编写一个在 ArrayList 中查找重复对象的方法,而不使用逐个元素的枚举。
不要让我为我解决问题。我请你提出一个在哪个方向挖掘的想法。
使用逐元素枚举 - 很容易完成。但怎么没有?
几年前有一个旧项目。因此,Android Studio 和 Gradle 也属于那个时代。
现在一切都很新鲜。
该项目由“导出到 Zip”保存。
现在(一切都是新鲜的),当你打开项目时,它开始下载旧的 Gradle。
如何导入项目但已经在新的 Gradle 上?
从 API 28 切换到 29。
有一个代码可以从手机播放随机音乐。
mus.setDataSource(songsList.get(rnd.nextInt(songsList.size())));
mus.prepare();
mus.start();
28日一切正常,29日没有任何反应。
这只发生在 Android 10 上的真实(3 台)和虚拟手机(在低版本上一切正常)。
我在日志中看不到任何错误。
一个有趣且重要的事实:
如果您从头开始安装应用程序,则会出现错误。如果它已经设置为 API 28 并将其更新为 29 - 一切都会正常工作。
我不会在任何地方保存任何东西,我不会缓存任何东西。只有当我点击按钮时,我才会得到歌曲列表。
允许阅读 - 我在日志中看到完整的歌曲列表。
歌曲路径没有区别(Path
和都试过了Uri
)
有 * js 脚本可以找出客户端正在使用的操作系统(windows、mac、android 等)
是否有可能以某种方式为 Android 中的 WebView 设置(读作“作弊”)此类脚本所需的操作系统?
要说应用本身或者WebView本身用的不是Android,而是Windows或者iPhone?
图书馆里有一张地图Leaflet.js
,鼠标滚轮默认放大或缩小2倍。
该库中将修复的方法的名称是2
什么1
?
重启手机后应该启动一项服务。为此,我制作了一个接收器,并在 Manifesto(我发现)中给了它必要的条件。
有 3 部手机,它们都有完全不同的行为。
红米手机 4x 安卓 7.1.2。只是不想工作。
联想 K5 笔记。安卓 5.1。此处服务在重新启动后启动,仅当服务在重新启动之前运行时
三星 Galaxy S5 安卓 6.0.1。这里一切似乎都很好。没有区别“服务是否在此之前启动?没有?”。重新启动后,服务将启动。
我的接收者
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent intentService = new Intent(context, MusicServ.class);
context.startService(intentService);
}
}
宣言
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<service
android:name=".MusicServ"
android:enabled="true"
android:exported="true"
android:process=":MusicServ">
</service>
<receiver
android:name=".MyReceiver"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="android.intent.action.REBOOT"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
音频文件存储在手机中。我想重现它。用户选择文件后,我正在获取文件的 URI
uri.getPath();
节目
/TREE/PRIMATY:VLAD/1.mp3
或者/DOCUMENT/PRIMATY:VLAD/1.mp3
如何在 MediaPlayer 中播放此文件?如何指定路径?
用户必须通过可视文件管理器指定包含文件的文件夹的路径。找到以下代码。但这里不是文件夹,而是文件。是的,我不明白路径本身记录在哪里。
任何人都可以提出其他解决方案。
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*"); //all files
// intent.setType("text/xml"); //XML file only
intent.addCategory(Intent.CATEGORY_OPENABLE);
try {
startActivityForResult(Intent.createChooser(intent, "Select a File to Upload"), a);
} catch (android.content.ActivityNotFoundException ex) {
// Potentially direct the user to the Market with a Dialog
Toast.makeText(this, "Please install a File Manager.", Toast.LENGTH_SHORT).show();
}
向上!
实现了选择文件并获取其路径。但我仍然无法选择文件夹。
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*"); //all files
intent.addCategory(Intent.CATEGORY_OPENABLE);
try {
startActivityForResult(Intent.createChooser(intent, "Select a File to Upload"), REQUEST_CODE);
} catch (android.content.ActivityNotFoundException ex) {
// Potentially direct the user to the Market with a Dialog
Toast.makeText(this, "Please install a File Manager.", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
Uri uri = data.getData();
Toast.makeText(this, uri+"", Toast.LENGTH_SHORT).show();
}
}
static final
和final
。
常数的两个值都不会改变。
有什么区别?
Lint found fatal errors while assembling a release target.
To proceed, either fix the issues identified by lint, or modify your build script as follows:
...
android {
lintOptions {
checkReleaseBuilds false
// Or, if you prefer, you can continue to check for errors in release builds,
// but continue the build even when errors are found:
abortOnError false
}
}
...
如果我遵循建议,那么将创建所有 apk。但是这个错误是什么?因为什么?可能有什么后果?
AlertDialog.Builder alert = new AlertDialog.Builder(this);
final EditText input = new EditText(this);
alert.setView(input);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
});
alert.show();
InputMethodManager imm = (InputMethodManager) getSystemService(MainActivity.INPUT_METHOD_SERVICE);
imm.showSoftInput(input, InputMethodManager.SHOW_FORCED);
我正在创建一个带有输入字段的 AlertDialogWindow。键盘必须立即出现,但它不会出现。我知道错误showSoftInput
不应该存在input
,而是已经创建的 AlertDialog 的一部分。如何得到它?