我将原型设置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) 我创建了一个基于免费和专业版的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) 我知道Anko提供了parseSingle,parseOpt和parseList的函数,我不明白为什么Android Developers(该书)的代码需要再次设计扩展parseList.
你可以告诉我吗?谢谢!
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)
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) 代码 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) 通常,我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 应用程序中使用 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) _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) 有人写了两个扩展函数(代码A2)Fragment并FragmentActivity实例化a ViewModel,效果很好,你可以看到代码A1和代码A3。
我希望为两者编写两个扩展函数(代码B2)Fragment并FragmentActivity实例化一个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) 我正在学习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) 以下代码来自项目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)