我在布局中使用的是androidx.constraintlayout.widget.ConstraintLayout,它没有显示链,也无法拖动任何小部件。我只是输入要使用的约束。
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="112dp"/>
Run Code Online (Sandbox Code Playgroud)
这是androidx约束布局的示例屏幕截图: androidx.constraintlayout.widget.ConstraintLayout
但是当我尝试切换回android.support.constraint.ConstraintLayout时,我可以看到它
<android.support.constraint.ConstraintLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="112dp"/>
Run Code Online (Sandbox Code Playgroud)
这是支持constraintLayout的示例屏幕截图: android.support.constraint.ConstraintLayout
这是错误还是什么?
我当前的解决方案是从:
implementation 'androidx.constraintlayout:constraintlayout:1.1.2'
Run Code Online (Sandbox Code Playgroud)
至
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
Run Code Online (Sandbox Code Playgroud)
但这不能解决我的问题,因为我不想使用支持。
android android-constraintlayout constraint-layout-chains androidx
Android在API 28上增加了缺口支持,但如何在运行API 27的设备上处理它(荣誉10,华为P20等)?
我试图使用,DisplayCutoutCompat但我无法创建它的实例,因为文档没有真正指出如何创建一个.
如何创建构造函数参数值:Rect safeInsets,List<Rect> boundingRects?
我也查看了构造函数的源代码,这对我来说有点混乱:
public DisplayCutoutCompat(Rect safeInsets, List<Rect> boundingRects) {
this(SDK_INT >= 28 ? new DisplayCutout(safeInsets, boundingRects) : null);
}
Run Code Online (Sandbox Code Playgroud)
这将始终在运行API <28的设备上返回null .先感谢您.
我已经按照Android开发人员的教程使用工作管理器结构在后台运行我的代码,但是当我尝试将我的工作人员排队时它不会运行,我收到以下错误:
2018-10-04 22:25:47.004 28669-28885/app.package.com.debug E/DefaultWorkerFactory: Could not instantiate app.package.com.MyWorker
java.lang.NoSuchMethodException: <init> []
at java.lang.Class.getConstructor0(Class.java:2320)
at java.lang.Class.getDeclaredConstructor(Class.java:2166)
at androidx.work.DefaultWorkerFactory.createWorker(DefaultWorkerFactory.java:58)
at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:180)
at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:117)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
2018-10-04 22:25:47.005 28669-28885/app.package.com.debug E/WorkerWrapper: Could for create Worker app.package.com.MyWorker
Run Code Online (Sandbox Code Playgroud)
我已经看到这个问题可能与worker上的默认构造函数有关但我已经使用了正确的构造函数而不是不推荐使用的默认函数.
我的工人被宣布为:
public class MyWorker extends Worker {
public MyWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
// Doesn't even get called
}
}
Run Code Online (Sandbox Code Playgroud)
它就像这样排队:
WorkManager workManager = WorkManager.getInstance();
if (myWorkerRequest == null) …Run Code Online (Sandbox Code Playgroud) 我最近将我的应用程序更改为目标API级别28,并且还开始使用androidx而不是支持库.在更改之后,我注意到具有以下回溯的崩溃
Fatal Exception: java.lang.IllegalStateException: Failure saving state: active MyFragment{22caf6fc (04a7bbf5-8806-4a45-a25d-616ed244bf18) id=0x7f1000ff} was removed from the FragmentManager
at androidx.fragment.app.FragmentManagerImpl.saveAllState(FragmentManagerImpl.java:2301)
at androidx.fragment.app.FragmentController.saveAllState(FragmentController.java:150)
at androidx.fragment.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:496)
at androidx.appcompat.app.AppCompatActivity.onSaveInstanceState(AppCompatActivity.java:510)
at com.company.utils.MyAppCompatActivity.onSaveInstanceState(MyAppCompatActivity.java:161)
at android.app.Activity.performSaveInstanceState(Activity.java:1311)
at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1288)
at android.app.ActivityThread.callCallActivityOnSaveInstanceState(ActivityThread.java:4166)
at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3577)
at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3633)
at android.app.ActivityThread.access$1300(ActivityThread.java:164)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1491)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:160)
at android.app.ActivityThread.main(ActivityThread.java:5541)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)
Run Code Online (Sandbox Code Playgroud)
我的所有活动都是从一个基础活动MyAppCompatActivity扩展而来的AppCompatActivity.在onSaveInstanceState方法中MyAppCompatActivity,我有一些日志行.我在ViewPager下实现了此活动中的三个片段,FragmentStatePageAdapter并且活动本身不是重写onSaveInstanceState方法.
我经历了一些接近这个的SO帖子,例如这个和这个,但是当我们使用FragmentManager自己的方法管理片段而不是使用ViewPagerAdapter来处理它时,它看起来好像正在发生.我不是那样做的,我正在做的最接近通常流程的是覆盖FragmentStatePageAdapter方法,instantiateItem并destroyItem帮助我有一个方法来获得代码中的片段引用,如 …
这个主题的小故事:应用程序只是在确认后用对话框更新点击行的值.在房间数据库上使用分页方案.
添加或删除项目时,将获取最新数据集并将其传递给submitList方法,然后可以看到所有更改并运行良好.
问题从那里开始,如果现有项目更新,则再次正确获取最新数据集并传递给submitList,但这次似乎没有变化.
当我调试DIFF_CALLBACK并抓住我的项目时areItemsTheSame,newHistory和oldHistory值是一样的!(怎么样!)
submitList方法中可能有任何错误?
初始化后,observe从房间中提取列表并传递给mHistoryAdapter.submitList(it).然后,如果我更新一个项目,观察再次被触发(我在param中看到更新的值it)并传递给submitList.
不幸的是,适配器不会改变......
mResolvedAddressViewModel = ViewModelProviders.of(this).get(ResolvedAddressViewModel::class.java)
mResolvedAddressViewModel.getAddresses(false).observe(this, Observer {
mHistoryAdapter.submitList(it)
})
Run Code Online (Sandbox Code Playgroud)
所有部件
模型
@Parcelize
@Entity
data class ResolvedAddress(
@PrimaryKey var id: String = UUID.randomUUID().toString(),
var requestedLat: Double = 0.0,
var requestedLon: Double = 0.0,
var requestedAddress: String = "",
var lat: Double,
var lon: Double,
var address: String,
var country: String,
var countryCode: String,
var city: …Run Code Online (Sandbox Code Playgroud) android android-architecture-components android-paging androidx
我正在尝试将工具栏绑定到导航控制器,为此我使用以下代码:
NavigationUI.setupWithNavController(toolbar, NavHostFragment.findNavController(nav_host))
Run Code Online (Sandbox Code Playgroud)
在菜单文件中,我提供了应用程序应导航到的片段的 ID,如下所示:
<item
android:id="@+id/menuFragment"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never" />
Run Code Online (Sandbox Code Playgroud)
我有一个简单的导航图文件,如下所示:
<navigation 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:id="@+id/nav_graph"
app:startDestination="@id/homeFragment">
<fragment
android:id="@+id/homeFragment"
android:name="com.vapoyan.myapplication.HomeFragment"
android:label="fragment_home"
tools:layout="@layout/fragment_home" >
<action
android:id="@+id/action_homeFragment_to_menuFragment"
app:destination="@id/menuFragment" />
</fragment>
<fragment
android:id="@+id/menuFragment"
android:name="com.vapoyan.myapplication.MenuFragment"
android:label="fragment_menu"
tools:layout="@layout/fragment_menu" />
</navigation>
Run Code Online (Sandbox Code Playgroud)
有没有人有经验或可以建议我如何解决问题,导航组件是否支持工具栏?
任何示例代码或参考?
我目前正在使用新的(对我而言)导航组件编写应用程序。我已经通过一个导航图来了解我的应用程序的基础知识,我有一个带有 BottomNavigationView 的片段,其中有 3 个单独的片段,我已经设法更新它以使用导航组件(就我的问题)使用带有与导航项匹配的 ID 的菜单。我以前使用 newInstance 方法将包传递给 onCreate 的片段显然现在没有使用,但我仍然需要将包传递给我的片段。
我无法找到任何完成此操作的示例,因为这些片段是隐式创建的。
我的代码结构为 ClientFragment,它是导航抽屉等的宿主片段;
class ClientFragment : Fragment() {
private val viewModel: ClientViewModel by viewModel()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_client, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.client = arguments?.getParcelable(ARG_CLIENT)!!
toolbar_client.title = viewModel.client.name
toolbar_client.setNavigationOnClickListener { Navigation.findNavController(view).navigateUp() }
}
}
Run Code Online (Sandbox Code Playgroud)
这个类以前持有 onclick 侦听器到我的片段,使用工具 viewModel.client 的 newInstance 方法。
我在 nav_graph 中的片段都很相似。第一个片段;
class ClientDetailsFragment : Fragment() {
private val viewModel: ClientViewModel …Run Code Online (Sandbox Code Playgroud) 是否可以在新的android viewpager2组件中启用-禁用刷卡功能?
由于我已将我的 Android 项目迁移到 AndroidX,我收到以下lint错误:
Error: Must be one of: Snackbar.LENGTH_INDEFINITE, Snackbar.LENGTH_SHORT, Snackbar.LENGTH_LONG [WrongConstant]
Snackbar snackbar = Snackbar.make(rootView, message, sticky ? Snackbar.LENGTH_INDEFINITE : 4500
Run Code Online (Sandbox Code Playgroud)
因此,我现在没有定义自定义持续时间(4500 毫秒),而是使用Snackbar.LENGTH_LONG. 由于我正在实施一些基于时间的操作,这取决于小吃栏的可见时间,因此我需要知道Snackbar.LENGTH_LONG以毫秒为单位的实际持续时间。我如何找出那个值?
这些文档在这里并没有真正的帮助:
显示 Snackbar 一小段时间。
我想升级 Google 图书馆:
build.gradle(应用程序):
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlin_version}"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1'
// Here an error appears.
implementation "com.android.support:appcompat-v7:${supportLibraryVersion}"
implementation "com.android.support:support-v4:${supportLibraryVersion}"
implementation "com.android.support:design:${supportLibraryVersion}"
implementation "com.android.support:support-vector-drawable:${supportLibraryVersion}"
implementation "com.android.support:recyclerview-v7:${supportLibraryVersion}"
implementation "com.android.support:appcompat-v7:${supportLibraryVersion}"
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation "com.android.support:support-compat:${supportLibraryVersion}"
// These libraries are updated.
// Google Maps.
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation "com.google.firebase:firebase-messaging:19.0.1"
implementation "com.google.android.gms:play-services-base:17.0.0"
// Firebase.
implementation 'com.google.firebase:firebase-config:18.0.0'
implementation 'com.google.firebase:firebase-core:17.0.0'
// Multidex.
implementation 'com.android.support:multidex:1.0.3'
}
Run Code Online (Sandbox Code Playgroud)
build.gradle(项目):
buildscript {
ext.compile_sdk_version = 29
ext.min_sdk_version = 16
ext.target_sdk_version = 29
ext.kotlin_version = '1.3.40'
ext.supportLibraryVersion = …Run Code Online (Sandbox Code Playgroud)