小编Lon*_*ger的帖子

Kotlin显示片段中的类型不匹配

我有一个包含RecyclerAdapter的片段.我想在onCreateView方法中初始化适配器,但它会抛出"Type mismatch. Required : Context , Found : FragmentActivity"此语句中的错误

我不知道为什么第一个显示此错误,第二个不包含编译时错误.

显示错误

recyclerView!!.adapter = RestaurantMenuAdapter(activity)
Run Code Online (Sandbox Code Playgroud)

没有显示错误

recyclerView!!.layoutManager = LinearLayoutManager(activity)
Run Code Online (Sandbox Code Playgroud)

Fragment.kt

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    // Inflate the layout for this fragment
    val view = inflater.inflate(R.layout.fragment_restaurant_menu, container, false)
    recyclerView = view.findViewById(R.id.restaurant_container)
    recyclerView!!.adapter = RestaurantMenuAdapter(activity)
    recyclerView!!.layoutManager = LinearLayoutManager(activity)
Run Code Online (Sandbox Code Playgroud)

RecyclerAdapter.kt

class RestaurantMenuAdapter  (val context : Context) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        val inflater = parent.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
        return …
Run Code Online (Sandbox Code Playgroud)

android android-context android-fragments kotlin

6
推荐指数
2
解决办法
5369
查看次数

在多活动中将 LiveData 替换为 EventBus

目前我的项目使用 EventBus 来发布事件,我正在尝试用 EventBus 替换 LiveData。理论上,它们的工作原理类似。一开始我迁移时没有任何痛苦。但出现了一个我不知道如何处理的情况。

这是场景。

LaunchActivity -> PersonInfoActivity -> UpdateInfoActivity

目前我们在LaunchActivity和PersonInfoActivity中使用EventBus订阅UserInfoEvent

LaunchActivity.java

public class LaunchActivity{
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onEvent(UserInfoEvent event){

     }
}
Run Code Online (Sandbox Code Playgroud)

PersonInfoActivity.java

public class PersonInfoActivity{
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onEvent(UserInfoEvent event){

     }
}
Run Code Online (Sandbox Code Playgroud)

更新信息活动.java

public class UpdateInfoActivity{
     public void onSubmit(){
          EventBus.getDefault().post(new UserInfoEvent());
     }
}
Run Code Online (Sandbox Code Playgroud)

而问题是,我想用LiveData来代替这个场景

我做了什么?

我读过有关 livedata Room 的单例使用的问题 - LiveData 观察者在数据库更新时不会触发,我想尝试使用相同的方式但没有运气。onChanged()每次当我开始活动时,事件都会触发

java android greenrobot-eventbus android-livedata android-architecture-components

5
推荐指数
1
解决办法
6147
查看次数

android数据绑定上的自定义XML属性

我已经使用AppCompatSpinner作为我的片段,我想setOnItemSelectedListener()在我的布局中使用.我试着从这里使用教程部分

https://developer.android.com/topic/libraries/data-binding/index.html?hl=en#custom_setters

但它没有提供完成简单操作的完整示例.我也从这里寻找答案

自定义控件中的android数据绑定

我仍然不明白该怎么做.我想有一个完整的例子,用xml属性中不存在的一些属性进行简单的自定义绑定,但它在UI控件中很有用

这是我的xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:apps="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
    >

    <data>

        <import type="android.view.View"/>

        <variable
            name="handler"
            type="com.my.OldHandlerInterface"/>
    </data>

    <merge
        tools:showIn="@layout/fragment_stock_replacement">


        <android.support.v7.widget.CardView
            android:id="@+id/exist_eqpt_card"
            style="@style/sccardview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.29"
            android:visibility="@{oldObj.updateOld_mode ? View.VISIBLE : View.GONE}"
            >

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_margin="10dp"
                android:orientation="vertical">

                <android.support.v7.widget.AppCompatSpinner
                    android:id="@+id/spn_status"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true"
                    android:layout_below="@+id/chk_installed"
                    apps:adapter="@{statusAdapter}"/>
            </RelativeLayout>

        </android.support.v7.widget.CardView>
        <!--</LinearLayout>-->

    </merge>
</layout>
Run Code Online (Sandbox Code Playgroud)

这是我的片段

public class ReplacementFragment extends QRScanFragment {
    ../
    @BindingAdapter("app:setOnItemSelectedListener")
    public static void setOnItemSelectedListener(AppCompatSpinner view, int pos) {
        //do sth
    }
    @Nullable
    @Override
    public View …
Run Code Online (Sandbox Code Playgroud)

data-binding android

3
推荐指数
1
解决办法
4015
查看次数

Room Persistence Library:无法解析符号Room

我将Android Studio 3.0 Beta 2与以下gradle设置一起使用

我可以搜索RxRoom,但没有找到Room类。按照“ 添加组件”的说明进行操作后,我无法在Fragment中使用Room类。

此类位于单独的模块中,app模块不包含任何房间库依赖项。

该错误在IDE中显示为“无法解析符号房间”。

在此处输入图片说明

build.gradle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"


    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation":
                                     "$projectDir/schemas".toString()]
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        targetCompatibility 1.8
        sourceCompatibility 1.8
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.0.2'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.android.support:design:26.0.2'
    implementation 'com.android.support:support-v4:26.0.2'
    implementation 'com.android.support:recyclerview-v7:26.0.2'
    testImplementation …
Run Code Online (Sandbox Code Playgroud)

android android-studio-3.0 android-room

3
推荐指数
1
解决办法
5258
查看次数

如何在单元测试中使用协程测试实时数据

我正在使用 mockito、junit5 和协程来获取存储库中的数据。但是在测试用例中调用了 no 方法。我尝试使用没有任何Dispatchersemit()功能的正常挂起功能,并且它有效。因此,我猜原因可能是由于 livedata 协程

GitReposRepository.kt

fun loadReposSuspend(owner: String) = liveData(Dispatchers.IO) {
    emit(Result.Loading)
    val response = githubService.getReposNormal(owner)
    val repos = response.body()!!
    if (repos.isEmpty()) {
        emit(Result.Success(repos))
        repoDao.insert(*repos.toTypedArray())
    } else {
        emitSource(repoDao.loadRepositories(owner)
                           .map { Result.Success(it) })
    }
}
Run Code Online (Sandbox Code Playgroud)

GitReposRepositoryTest.kt

internal class GitRepoRepositoryTest {

    private lateinit var appExecutors:AppExecutors
    private lateinit var repoDao: RepoDao
    private lateinit var githubService: GithubService
    private lateinit var gitRepoRepository: GitRepoRepository

    @BeforeEach
    internal fun setUp() {
        appExecutors = mock(AppExecutors::class.java)
        repoDao = mock(RepoDao::class.java)
        githubService = mock(GithubService::class.java) …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-testing android-livedata kotlin-coroutines

3
推荐指数
1
解决办法
3527
查看次数

Flutter显示Android清单错误“叠加清单”

当我尝试按照此处的flutter教程进行操作时。

https://codelabs.developers.google.com/codelabs/mdc-101-flutter/#2并运行main.dart

我在终端中收到以下gradle错误

/${user}/Documents/material-components-flutter-codelabs/mdc_100_series/android/app/src/debug/AndroidManifest.xml错误:覆盖清单:在AndroidManifest.xml中声明的包属性:2:5-41 value =( com.example.mdc_100_series)在AndroidManifest.xml:2:5-39的主清单中声明了不同的值=(com.example.mdc100series)建议:删除AndroidManifest.xml上的overlay声明并将其放置在build.gradle中:flavorName {applicationId =“ com.example.mdc_100_series”}

我无法弄清楚问题出在哪。

android dart flutter

2
推荐指数
1
解决办法
791
查看次数

android 数据绑定的一个属性中可以有两个参数吗?

我已阅读此博客中的自定义设置器。https://medium.com/google-developers/android-data-binding-custom-setters-55a25a7aea47#.7ylt58pzz

我想知道我是否可以使用以下这样的东西

在 xml 中

android:imageUrl="@{param1,param2}"
Run Code Online (Sandbox Code Playgroud)

在java类中

@BindingAdapter(value={"imageUrl"}, requireAll=false)
public static void setImageUrl(ImageView imageView, String url,
        Drawable placeHolder) {
    if (url == null) {
        imageView.setImageDrawable(placeholder);
    } else {
        MyImageLoader.loadInto(imageView, url, placeholder);
    }
}
Run Code Online (Sandbox Code Playgroud)

视图中的一个属性和两个参数。由于我在android数据绑定中看到了lambdas表达式(实际上它并没有真正用JDK 8编译)https://developer.android.com/topic/libraries/data-binding/index.html#listener_binding,任务变量可以添加在处理程序事件中。

android:onClick="@{(theView) -> presenter.onSaveClick(theView, task)}"
Run Code Online (Sandbox Code Playgroud)

自定义绑定方法中是否可以有两个(或更多)参数?

android android-databinding

1
推荐指数
1
解决办法
4389
查看次数

使用导航组件从对话框堆栈清除到片段

我正在使用导航组件进行导航,但结果很奇怪。当我尝试从对话框片段(购物车)按下后退按钮时。当前片段堆栈图(Home -> Notification)清晰,如下所示。

导航视频

当我按下购物车页面上的后退按钮时,我期望的是返回通知页面,而不是主页。

我没有在这些片段中添加任何自定义后退事件。看起来很奇怪,但我在官方中找不到任何相关文档。

感谢您对此问题的任何评论或建议

这是我的 mobile-navigation.xml

<?xml version="1.0" encoding="utf-8"?>
<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/mobile_navigation"
    app:startDestination="@id/navigation_explore">

    <fragment
        android:id="@+id/navigation_explore"
        android:name="com.cn29.hkbvmall.ui.home.HomeFragment"
        tools:layout="@layout/fragment_explore" >
        <action
            android:id="@+id/action_navigation_explore_self"
            app:destination="@id/navigation_explore"
            app:enterAnim="@anim/slide_in_right"
            app:exitAnim="@anim/slide_out_left"
            app:popExitAnim="@anim/slide_out_right" />
        <argument
            android:name="activeCategoryId"
            app:argType="integer"
            android:defaultValue="0" />
    </fragment>

    <fragment
        android:id="@+id/navigation_notifications"
        android:name="com.cn29.hkbvmall.ui.notifications.NotificationsFragment"
        tools:layout="@layout/fragment_notifications" />
    <dialog
        android:id="@+id/navigation_mylist"
        android:name="com.cn29.hkbvmall.ui.mylist.MyListFragment"
        tools:layout="@layout/fragment_mylist" />
    <dialog
        android:id="@+id/navigation_cart"
        android:name="com.cn29.hkbvmall.ui.shoppingkart.GoodsListDialogFragment"
        android:label="GoodsListDialogFragment"
        tools:layout="@layout/fragment_shoppingkart"
        />

    <dialog
        app:moduleName="account"
        android:id="@+id/navigation_account"
        android:name="com.cn29.account.ui.AccountListDialogFragment"
        tools:layout="@layout/dynamic_feature_install_fragment"
    />
</navigation>
Run Code Online (Sandbox Code Playgroud)

这是我的 MainActivity.kt

class MainActivity : AppCompatActivity() {
    private lateinit var toolbar: Toolbar
    private lateinit var appBarConfiguration: AppBarConfiguration
    private val navController: NavController by …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-navigation android-architecture-navigation

1
推荐指数
1
解决办法
355
查看次数