我想手动处理复杂视图的旋转 ,包括恢复支撑位置和大小.在这一刻,我正在尝试这样做onLayout(更好的想法是velcome).有时它运作良好,但通常第一次轮换是错位或没有孩子的视图.
private int oldOrientation = -1;
/**
* Override method to configure the dragged view and secondView layout properly.
*/
@Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
Log.e("mylayout", "onLayout " + df.format(new Date(Calendar.getInstance().getTimeInMillis())));
if (isInEditMode()) {
super.onLayout(changed, left, top, right, bottom);
} else {
dragView.setVisibility(INVISIBLE);
if (isDragViewAtTop() && (oldOrientation != getResources().getConfiguration().orientation || oldOrientation == -1)) {
dragView.layout(left, top, right, transformer.getOriginalHeight());
secondView.layout(left, transformer.getOriginalHeight(), right, bottom);
ViewHelper.setY(dragView, top);
ViewHelper.setY(secondView, transformer.getOriginalHeight()); …Run Code Online (Sandbox Code Playgroud) 注意:我不能使用关系,因为我们有性能问题,这在直接连接查询中没有重现。
直到我添加target user和来自group user和对应
LEFT JOIN chat_user ON chat_user.chat_user_id = message_item.messages_target_user
LEFT JOIN chat_user ON chat_user.chat_user_id = message_item.messages_from_group_user
Run Code Online (Sandbox Code Playgroud)
它运作良好。但是添加后,我无法弄清楚如何在查询中映射这些前缀。
class ReadMessageEntity(
@Embedded
var message: MessageEntity,
@Embedded
var block: BlockEntity?,
@Embedded
var user: ChatUserRelationEntity,
@Embedded(prefix = "target_user_")
var targetUser: ChatUserEntity?,
@Embedded(prefix = "from_group_user_")
var fromGroupUser: ChatUserEntity?
)
Run Code Online (Sandbox Code Playgroud)
这是我试图查询的:
@Transaction
@Query("""
SELECT * FROM message_item
LEFT JOIN block_item ON block_item.block_message_id = message_item.message_local_id
LEFT JOIN chat_user_relation ON chat_user_relation.chat_user_id = message_item.message_user_id
LEFT JOIN chat_user ON chat_user.chat_user_id = message_item.messages_target_user
LEFT JOIN …Run Code Online (Sandbox Code Playgroud) 我在viewpager中有2个片段.当应用程序暂停时(按主页按钮,或低于其他应用程序)然后恢复,otto throw
E/stack: task on pause
E/stack: note on pause
E/stack: onPause
E/stack: onResume
E/stack: task on resume
E/stack: note on resume
E/AndroidRuntime: FATAL EXCEPTION: main
E/AndroidRuntime: java.lang.RuntimeException: Unable to resume activity {yarh.bigdig.bigdigtaskmanager/yarh.bigdig.bigdigtaskmanager.view.activity.SplashScreenActivity}: java.lang.IllegalArgumentException: Object already registered.
E/AndroidRuntime: at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2575)
E/AndroidRuntime: at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2603)
E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime: at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:4745)
E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime: Caused by: java.lang.IllegalArgumentException: Object already registered.
E/AndroidRuntime: …Run Code Online (Sandbox Code Playgroud) 我在代码中添加的一些地方
ActionBar ab = ((AuthActivity) getActivity()).getSupportActionBar();
if (ab != null) {
ab.hide();
ab.show();
ab.setTitle(R.string.auth_tt_title);
ab.setDisplayHomeAsUpEnabled(true);
}
Run Code Online (Sandbox Code Playgroud)
后来,我添加了一些片段,其中一个片段可能会更改标题并显示主页按钮。因此,我需要在进行更改之前为 ActionBar 保存状态,以便在片段消失后能够恢复它。我可以得到标题
private String getAbStatus(AppCompatActivity activity) {
String title="";
boolean visible;
ActionBar ab = activity.getSupportActionBar();
if (ab != null) {
if (ab.getTitle() != null) title = ab.getTitle().toString();
}
return title;
}
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能获得 HomeAsUp 的状态?
我在launchMode SingleInstance中有几个活动.注销时我想完成所有活动并打开launchScreen.
val intent = Intent(context, LauncherActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
(context as AppCompatActivity).finishAffinity()
context.startActivity(intent)
Run Code Online (Sandbox Code Playgroud)
但是,如果我按回Launcher活动,我会转发到以前启动的具有singleInstance模式的活动
使用以下代码(取自android-quickstart),如果您拍摄多张照片,此代码可以生成多个具有相同名称的文件.如何修改以确保替换具有相同名称的文件?
public class MainActivity extends Activity implements ConnectionCallbacks,
OnConnectionFailedListener {
private static final String TAG = "android-drive-quickstart";
private static final int REQUEST_CODE_CAPTURE_IMAGE = 1;
private static final int REQUEST_CODE_CREATOR = 2;
private static final int REQUEST_CODE_RESOLUTION = 3;
private GoogleApiClient mGoogleApiClient;
private Bitmap mBitmapToSave;
/**
* Create a new file and save it to Drive.
*/
private void saveFileToDrive() {
// Start by creating a new contents, and setting a callback.
Log.i(TAG, "Creating new contents.");
final Bitmap image …Run Code Online (Sandbox Code Playgroud) 当我调用startActivityForResult(new Intent(getActivity(), VkAuth.class), VK_ID);三星时(在 HTC 和 Nexus 上一切正常),onActivityResult在创建 VkAuth 活动之前调用 requestCode == VK_ID 和结果代码 0(已取消)。
父 Activity 具有android:launchMode="singleInstance". startActivityForResult从附加到父 Activity 的 Fragment 调用。日志
E/AuthenticationFragment: vkLogIn
E/AuthenticationFragment: startActivityForResult 9101
E/AuthenticationFragment: onPause
E/MainActivity: onPause
E/MainActivity: onActivityResult before super: request - 271245, result - 0
E/AuthenticationFragment: request - 9101, result - 0
E/MainActivity: onActivityResult after super: request - 271245, result - 0
E/AuthenticationFragment: onPause
E/MainActivity: onPause
E/VkAuth: onCreate
E/VkAuth: onResume
Run Code Online (Sandbox Code Playgroud) dialdValue 的值永远不会更新。它总是具有值“A” 如何正确链接 mutableStates?
@Composable
fun DropDownDemo() {
var expanded by remember { mutableStateOf(false) }
val items = listOf("A", "B", "C", "d", "E", "F")
var selectedIndex by remember { mutableStateOf(0) }
var disabledValue by remember { mutableStateOf(items[selectedIndex]) }
Log.e("mcheck", "$selectedIndex $disabledValue")
Box(
modifier = Modifier
.fillMaxSize()
.wrapContentSize(Alignment.TopStart)
)
{
Text(
items[selectedIndex],
modifier = Modifier
.fillMaxWidth()
.clickable(onClick = { expanded = true })
.background(Color.Gray)
)
DropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false },
modifier = Modifier
.fillMaxWidth()
.background(Color.Red) …Run Code Online (Sandbox Code Playgroud) 我有几个字符串:a,b,c,d,e.我想将它们保存为文件FILENAME作为单个字符串
a b c d:e.问题 - 我需要保持d;e从新行开始的信息.
String str = a
+ " "
+ b
+ c
+ "\n "
+ d
+ ";"
+ e + "\r\n";
try {
fos = openFileOutput(FILENAME, Context.MODE_APPEND);
fos.write(str.getBytes());
fos.flush();
fos.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 在偏好活动中,我支持从xml列出首选项
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference
android:key="lang"
android:title="@string/LangTitle"
android:summary="@string/LangSummary"
android:defaultValue="en"
android:entries="@array/entries_lang"
android:entryValues="@array/entryvalues_lang"
android:dialogTitle="@string/LangDialogTitle"
/>
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
首先显示设置为tittle和description的首选项屏幕.当我点击它时,会显示带有可用选项的对话框.
有没有办法只显示该对话框?是否直接打电话给它?
android ×9
kotlin ×2
android-room ×1
android-view ×1
back-stack ×1
io ×1
java ×1
otto ×1
string ×1