小编Hel*_*oCW的帖子

为什么我不能覆盖`Array`(`Array.prototype`)的原型?

我将原型设置Array为一个实例my,我认为book.aa会显示"aa",但它显示"undefined",为什么?谢谢!

   <html>
    <head>
        <title>Array Properties</title>
        <h2>Array Properties</h2>
        <script type="text/javascript">
            function my() {
                this.aa = 'aa';
            }
            Array.prototype = new my();
            Array.prototype.bb = "bb";
            var book = new Array();  
            book[0] = "War and Peace";  

        </script>
    </head>
    <body bgcolor="lightblue">
        <script type="text/javascript">
            document.write(book.aa+book.bb);
        </script>
    </body>

    </html>
Run Code Online (Sandbox Code Playgroud)

javascript

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

我可以在文件夹树中列出所有字符串资源文件吗?

我创建了一个基于免费和专业版的productFlavors项目,并为不同的版本使用不同的字符串资源文件,文件夹构造是cc.png.

如果我在面板中更改Build Variant,则Android选项卡中的值显示两个strings.xml(2),一个位于主文件夹,另一个位于free或pro文件夹,您可以看到aa.png和bb.png.

我希望所有字符串资源文件可以一起显示,它会显示三个string.xml(3),第一个是主文件夹,sencond是免费文件夹,第三个是pro文件夹.我怎样才能做到这一点 ?谢谢!

CC.Png

在此输入图像描述

AA.png

在此输入图像描述

BB.png

在此输入图像描述

的build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "info.dodata.messagecleanup"
        minSdkVersion 9
        targetSdkVersion 22
        versionCode 7
        versionName "1.07"
        archivesBaseName = "MessageCleanup-V" + versionName
    }


    productFlavors {
        free {
            applicationId "info.dodata.messagecleanup"
            buildConfigField "String", "AppName", "\"Message Cleanup\""
        }


        pro {
            applicationId "info.dodata.messagecleanup.pro"
            buildConfigField "String", "AppName", "\"Message Cleanup Pro\""
        }
    }


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

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile …
Run Code Online (Sandbox Code Playgroud)

android android-studio

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

为什么Kotlin for Android Developers(书)需要再次添加扩展名parseList?

我知道Anko提供了parseSingle,parseOpt和parseList的函数,我不明白为什么Android Developers(该书)的代码需要再次设计扩展parseList.

你可以告诉我吗?谢谢!

https://github.com/antoniolg/Kotlin-for-Android-Developers/blob/master/app/src/main/java/com/antonioleiva/weatherapp/data/db/ForecastDb.kt

override fun requestForecastByZipCode(zipCode: Long, date: Long) = forecastDbHelper.use {

        val dailyRequest = "${DayForecastTable.CITY_ID} = ? AND ${DayForecastTable.DATE} >= ?"
        val dailyForecast = select(DayForecastTable.NAME)
                .whereSimple(dailyRequest, zipCode.toString(), date.toString())
                .parseList { DayForecast(HashMap(it)) }

}
Run Code Online (Sandbox Code Playgroud)

https://github.com/antoniolg/Kotlin-for-Android-Developers/blob/master/app/src/main/java/com/antonioleiva/weatherapp/extensions/DatabaseExtensions.kt

fun <T : Any> SelectQueryBuilder.parseList(parser: (Map<String, Any?>) -> T): List<T> =
        parseList(object : MapRowParser<T> {
            override fun parseRow(columns: Map<String, Any?>): T = parser(columns)
})
Run Code Online (Sandbox Code Playgroud)

android kotlin anko

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

Android Studio 4.0 中 BottomNavigationView 和 TabLayout 的 Tab UI 有什么不同?

代码 A 和图像 A 来自项目Architecture-components-samples

代码 B 和图像 B 来自项目sunflower

代码A用于com.google.android.material.bottomnavigation.BottomNavigationView实现Tab UI。

代码B用于com.google.android.material.tabs.TabLayout实现Tab UI。

看起来这两个控件可以做同样的事情。

Android Studio 4.0 中 BottomNavigationView 和 TabLayout 的 Tab UI 有什么不同?

代码A

<LinearLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.android.navigationadvancedsample.MainActivity">

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottom_nav"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:menu="@menu/bottom_nav"/>

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/nav_host_container"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />


</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

代码B

<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
 
    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:id="@+id/coordinator_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">

        <androidx.viewpager2.widget.ViewPager2
            android:id="@+id/view_pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

        <com.google.android.material.appbar.AppBarLayout
            android:id="@+id/app_bar_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fitsSystemWindows="true"
            android:theme="@style/Theme.Sunflower.AppBarOverlay">

            <com.google.android.material.appbar.CollapsingToolbarLayout
                android:id="@+id/toolbar_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_scrollFlags="scroll|snap" …
Run Code Online (Sandbox Code Playgroud)

android-studio

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

如果我使用视图绑定,如何找到 NavController?

通常,我val navController: NavController = findNavController(R.id.nav_host_fragment)在代码 A 中使用来查找 NavController,它基于R.id.nav_host_fragment.

现在我在应用程序中使用视图绑定,就像代码B一样,如果我使用视图绑定,我该如何使用NavController?

顺便说一句,在我看来, R.id.nav_host_fragment视图绑定将不可用,对吧?

代码A

class TasksActivity : AppCompatActivity() { 

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.tasks_act)

        val navController: NavController = findNavController(R.id.nav_host_fragment)
     }
 
}
Run Code Online (Sandbox Code Playgroud)

代码B

class TasksActivity : AppCompatActivity() {
    
    private lateinit var binding: TasksActBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = TasksActBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)       
      
        //val navController: NavController = findNavController(R.id.nav_host_fragment)       
    }

}
Run Code Online (Sandbox Code Playgroud)

任务_act.xml

<androidx.drawerlayout.widget.DrawerLayout
    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/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".tasks.TasksActivity"
    tools:openDrawer="start">

    <LinearLayout
        android:layout_width="match_parent" …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack

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

为什么状态为“已退款”的订单在 Google 应用内支付系统中显示为“已购买”?

我在我的 Android 应用程序中使用 Google 应用内结算版本 3,我正在基于以下代码测试应用程序的订单模块。

在这种情况下,用户的订单已被 Google Play 退款,但当我运行 时mBilling.initBillingClient(),我发现purchase.purchaseState == Purchase.PurchaseState.PURCHASEDinprivate fun processPurchases已启动。

退款状态为“已购买”的订单似乎已成功,如何修复?

FragmentBuy.kt

class FragmentBuy : Fragment() {
     ...
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        binding = DataBindingUtil.inflate(
            inflater, R.layout.layout_buy, container, false
        )
   
        val mBilling=Billing.getInstance(requireActivity(), getString(R.string.skuRegisterApp)) 
        mBilling.initBillingClient()
        ...       
    }

}
Run Code Online (Sandbox Code Playgroud)

计费.kt

class Billing private constructor (private val mContext: Context, private val purchaseItem :String)
    :PurchasesUpdatedListener, BillingClientStateListener   {

    private lateinit var playStoreBillingClient: BillingClient
    private val mapSkuDetails = mutableMapOf<String,SkuDetails>() …
Run Code Online (Sandbox Code Playgroud)

android in-app-billing in-app

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

如何在 Kotlin 中将 MutableLiveData&lt;Boolean&gt;() 的值设置为不利?

_displayCheckBox是 a MutableLiveData<Boolean>,我希望将其设置为不利。

但似乎_displayCheckBox.value = !_displayCheckBox.value!! 不能很好地工作,我该如何解决?

代码 A

private val _displayCheckBox = MutableLiveData<Boolean>(true)
val displayCheckBox : LiveData<Boolean> = _displayCheckBox

fun switchCheckBox(){
    _displayCheckBox.value =  !_displayCheckBox.value!!   //It seems that it can't work well.
}
Run Code Online (Sandbox Code Playgroud)

android kotlin android-livedata

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

如何在 Kotlin 中编写扩展函数来实例化 AndroidViewModel?

有人写了两个扩展函数(代码A2)FragmentFragmentActivity实例化a ViewModel,效果很好,你可以看到代码A1和代码A3。

我希望为两者编写两个扩展函数(代码B2)FragmentFragmentActivity实例化一个AndroidViewModel,你可以看到代码B1和代码B3,我该怎么办?谢谢!

代码 A1

class HomeViewModel_A(private val mDBVoiceRepository: DBVoiceRepository) :  ViewModel() {

}
Run Code Online (Sandbox Code Playgroud)

代码 A2

inline fun <reified T : ViewModel> Fragment.getViewModel(noinline creator: (() -> T)? = null): T {
    return if (creator == null)
        ViewModelProvider(this).get(T::class.java)
    else
        ViewModelProvider(this, BaseViewModelFactory(creator)).get(T::class.java)
}

inline fun <reified T : ViewModel> FragmentActivity.getViewModel(noinline creator: (() -> T)? = null): T {
    return if (creator == null)
        ViewModelProvider(this).get(T::class.java)
    else
        ViewModelProvider(this, BaseViewModelFactory(creator)).get(T::class.java)
}
Run Code Online (Sandbox Code Playgroud)

代码 A3

class …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack

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

我可以在 Android 模拟器中测试 Google Play 应用内审核吗?

我正在学习Google Play 应用内评论

我在Android模拟器中运行代码A,我希望像图像A一样显示Google应用内评论UI,但我只得到信息“aa”,这意味着请求失败。

我可以在 Android 模拟器中测试 Google Play 应用内审核吗?

代码A

val manager = ReviewManagerFactory.create(mContext)
   
    val request = manager.requestReviewFlow()
   //val manager = FakeReviewManager(mContext)
 
    request.addOnCompleteListener { request ->
                if (request.isSuccessful) {
                    // We got the ReviewInfo object
                    val reviewInfo = request.result


                    val flow = manager.launchReviewFlow(mActivity, reviewInfo)
                    flow.addOnCompleteListener { _ ->
                        // The flow has finished. The API does not indicate whether the user
                        // reviewed or not, or even whether the review dialog was shown. Thus, no
                        // matter …
Run Code Online (Sandbox Code Playgroud)

android google-play-services

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

为什么作者在一个项目中定义了一个空白接口?

以下代码来自项目https://github.com/skydoves/Pokedex

我不明白为什么作者需要定义一个空白接口Repository

使用空白界面有Repository什么好处?

存储库.kt

/** Repository is an interface for configuring base repository classes. */
interface Repository
Run Code Online (Sandbox Code Playgroud)

详细资料库.kt

class DetailRepository @Inject constructor(
  private val pokedexClient: PokedexClient,
  private val pokemonInfoDao: PokemonInfoDao
) : Repository {
   ...
}
Run Code Online (Sandbox Code Playgroud)

主存储库.kt

class MainRepository @Inject constructor(
  private val pokedexClient: PokedexClient,
  private val pokemonDao: PokemonDao
) : Repository {
   ...
}
Run Code Online (Sandbox Code Playgroud)

android kotlin

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