有人告诉我使用 FragmentStateAdapter 的 createFragment 覆盖来按索引获取当前片段。
这就是我的适配器的样子。
class AddRestaurantPagerAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) :
FragmentStateAdapter(fragmentManager, lifecycle) {
private var fragments = listOf<Fragment>(
FragmentA.newInstance(),
FragmentB.newInstance(),
FragmentC.newInstance(),
FragmentD.newInstance()
)
override fun getItemCount() = 4
override fun createFragment(position: Int) =
fragments[position]
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,直到我们在此活动/片段上强制使用 onSaveInstance/OnRestoreInstance。
ViewPager2 重新加载已经存在的片段,我们需要一种方法来访问它。FragmentStateAdapter 类中的以下 LOC 证明了这一点
private void ensureFragment(int position) {
long itemId = getItemId(position);
if (!mFragments.containsKey(itemId)) {
// TODO(133419201): check if a Fragment provided here is a new Fragment
Fragment newFragment = createFragment(position);
newFragment.setInitialSavedState(mSavedStates.get(itemId));
mFragments.put(itemId, newFragment);
}
}
Run Code Online (Sandbox Code Playgroud)
在 activity/fragment recreation …
这就是我最终给我的jetpack Compose盒子一个圆角形状的方式
Box(modifier = Modifier
.size(32.dp)
.clip(CircleShape)
.border(BorderStroke(2.dp, Color.Red), CircleShape)
){
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,CircleShape 在修改器链中被提及两次。感觉好像必须有更好的方法来做到这一点。
有任何想法吗?
我正在测试 Kotlin 注释,但无法让这段看似简单的代码正常工作
这是我的简单注释
@IntDef(1,2)
@Target(
AnnotationTarget.VALUE_PARAMETER)
@Retention(AnnotationRetention.SOURCE)
@MustBeDocumented
annotation class OnlyOneTwo
Run Code Online (Sandbox Code Playgroud)
现在我假设如果我用 装饰一个值参数@OnlyOneTwo,如果我给它一个像 那样的值,该方法会引发编译错误5。
我像这样使用这个注释
fun onlyTakesOneTwos(@OnlyOneTwo input:Int){
}
onlyTakesOneTwos(6) // shouldn't this throw a compile error ?
Run Code Online (Sandbox Code Playgroud)
我记得在Java中它曾经抛出一个错误。
我很惊讶这个非常重要的细节缺少在互联网上的全面演练.或者也许我是一个最糟糕的Google员工.或者是一个完全愚蠢的程序员.
我几个月来一直在研究android,但最近我被告知要做JNI.我的C技能已经生锈了.然而,当我坚持这一点并且无法继续前进时,我正赶上来.
我想要简单的东西.这是我在MainActivity中的原生方法声明
public native Object createObject();
这就是我打算如何使用它
Object abc = createObject();
Integer num = (Integer) abc;
Run Code Online (Sandbox Code Playgroud)
我只想从C创建一个java.lang.Integer对象,并将其发送给java.它不能变得更简单
jobject Java_com_example_hellojni_HelloJni_callbackJava(JNIEnv * env, jobject this )
{
jclass cls = (*env)->FindClass(env, "java/lang/Integer");
jmethodID methodID = (*env)->GetMethodID(env, cls, "<init>", "(I)V");
jint number = 8 ;
return (*env)->NewObject(cls, methodID, number);
}
Run Code Online (Sandbox Code Playgroud)
(android ndk r8c)我受到堆栈跟踪的欢迎,这会导致我的应用程序崩溃.
12-14 16:10:07.595: D/dalvikvm(302): Trying to load lib /data/data/com.example.hellojni/lib/libhello-jni.so 0x45f3da60
12-14 16:10:07.625: D/dalvikvm(302): Added shared lib /data/data/com.example.hellojni/lib/libhello-jni.so 0x45f3da60
12-14 16:10:07.625: D/dalvikvm(302): No JNI_OnLoad found in /data/data/com.example.hellojni/lib/libhello-jni.so 0x45f3da60, skipping init
12-14 …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的按钮上应用统一的样式。
这是我的 v21/styles.xml
<style name="DefaultButton" parent="Widget.AppCompat.Button.Colored">
<item name="android:colorButtonNormal">#f00</item>
<item name="android:textColor">@color/colorTextSecondary</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我像这样将其应用到我的按钮上
<Button
android:id="@+id/submit_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginTop="@dimen/unit_large"
style="@style/DefaultButton"
android:text="Lemme In!" />
Run Code Online (Sandbox Code Playgroud)
这里没有什么特别的事情发生。但我的按钮的颜色没有改变。物质支持包有什么变化吗?我正在使用“25.3.1”
实际上,所有这些都是我必须做的更大努力的一部分,以更改应用程序的默认按钮样式,如下所示
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:buttonStyle">@style/DefaultButton</item>
</style>
Run Code Online (Sandbox Code Playgroud)
然后我将删除所有按钮上的单独样式属性
我的 TeamDao 中有这个
@Query("select * from teams where id = :teamId")
Flowable<Team> getRivals(int teamId);
Run Code Online (Sandbox Code Playgroud)
我像这样订阅这个
teamRepository.getRivals(61).
distinctUntilChanged().
observeOn(SchedulerProvider.getInstance().ui()).
subscribeOn(SchedulerProvider.getInstance().computation())
.subscribe(team -> Log.d("HomeActivity", team.getName()));
Run Code Online (Sandbox Code Playgroud)
每当 Team 表的任何行发生任何更改时,无论它是否带有 id 61 ,我都会看到我的 this 订阅者正在调用。
我在博客上读到 distinctUntilChanged() 正是用来避免这种情况的。
我的团队POJO是这样的
@Entity(tableName = "teams",
foreignKeys = {
@ForeignKey
(entity = User.class,
parentColumns = "id",
childColumns = "userId",
onDelete = ForeignKey.CASCADE),
@ForeignKey
(entity = Neighbourhood.class,
parentColumns = "id",
childColumns = "neighbourhoodId"
)})
public class Team {
@PrimaryKey
int id;
private String name;
private String imageUrl;
@Embedded(prefix = …Run Code Online (Sandbox Code Playgroud) 更新了android studio之后,布局编辑器中的XML格式被破坏了。最初,每个属性都位于单独的行上。但是,现在有两个或三个属性排成一行。
我进入“设置”->“编辑器”->“代码样式”->“ XML”,然后在“布局文件”区域下将“包裹属性”设置为“总是包裹”,并选中“先插入后换行”属性。
但是效果没有出现。
有指针吗?
我使用挂起例程构建器使 Firebase 任务从基于异步侦听器的代码转移到基于协程的代码。
这是我的 suspendcoroutine,通过它我实现了协程行为。
suspend fun <T> Task<T>.awaitTask(): T =
suspendCoroutine { continuation ->
addOnCompleteListener { task ->
if (task.isSuccessful) {
continuation.resume(task.result!!)//what to do if task.result is null
} else {
continuation.resumeWithException(task.exception!!)
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我调用它的方式
firebase.createUserWithEmailAndPassword(userCredentials.email!!, userCredentials.password!!).awaitTask()
Run Code Online (Sandbox Code Playgroud)
一切正常,直到我们执行一个可能为空结果的任务。喜欢 。
firebase.currentUser?.updateProfile(profileUpdates)?.awaitTask()
Run Code Online (Sandbox Code Playgroud)
这里在成功更新后,task.result 为空。在那种情况下,应该将什么传递给 continuation.resume?。
这是我的实体SportTeam:
public class SportTeam : BaseEntity
{
public int Id { get; set; }
public int SportId { get; set; }
public int TeamId { get; set; }
public int TotalPlays { get; set; }
public int TotalWins { get; set; }
public int TotalDefeats { get; set; }
public int TotalDraws { get; set; }
public float WinPercentage { get; set; }
public float Score { get; set; }
// navs
public virtual Ladder Ladder { get; …Run Code Online (Sandbox Code Playgroud) 根据https://developer.android.com/topic/libraries/architecture/viewmodel 上的“片段之间共享数据”部分,我们被告知在活动范围内创建一个 ViewModel 并在片段之间共享是要走的路.
这是在 ViewModel 中设置值的 Fragment
class MasterFragment : Fragment() {
private lateinit var itemSelector: Selector
private lateinit var model: SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
model = activity?.run {
ViewModelProviders.of(this).get(SharedViewModel::class.java)
} ?: throw Exception("Invalid Activity")
itemSelector.setOnClickListener { item ->
// Update the UI
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是使用属性集的细节片段
class DetailFragment : Fragment() {
private lateinit var model: SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
model = activity?.run {
ViewModelProviders.of(this).get(SharedViewModel::class.java)
} ?: throw Exception("Invalid Activity")
model.selected.observe(this, …Run Code Online (Sandbox Code Playgroud) android ×8
java ×2
kotlin ×2
android-ndk ×1
android-room ×1
c# ×1
linq ×1
rx-android ×1
rx-java2 ×1
sql-server ×1