我正在使用2-way数据绑定,使用EditText中设置的字符串从ViewModel中更新LiveData String对象:
<android.support.design.widget.TextInputEditText
android:id="@+id/writeReviewTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@={viewModel.liveReviewTitle}"
/>
Run Code Online (Sandbox Code Playgroud)
因此,据我了解,每次EditText中的文本更改时,都会更新ViewModel其liveReviewTitle属性。我认为这是通过使用TextWatcher或库正在照顾我的某种侦听机制来实现的。我还认为,当文本需要更新时,就会setter调用它。似乎并非如此!当文本的变化,我需要做一些更多的东西在我的ViewModel,所以我实现了自定义setter的liveReviewTitle,但它没有被调用(我试过调试)。这是在ViewModel课堂上的样子:
var liveReviewTitle: MutableLiveData<String> = MutableLiveData()
set(value) {
field = value
customLogicHere()
}
Run Code Online (Sandbox Code Playgroud)
尝试调试此,setter但似乎从未被调用!这是怎么回事 感到有些困惑。文本将被更新,并保存在中ViewModel,只是setter不被调用。
data-binding android kotlin android-databinding android-livedata
我在Kotlin帽子中有一个数据类,它正在使用@Parcelize注释进行简单的包裹。现在,我想将一个函数传递给此类,并且我真的不知道如何在打包期间不考虑该函数。
这是我的数据类:
@Parcelize
data class GearCategoryViewModel(
val title: String,
val imageUrl: String,
val categoryId: Int,
val comingSoon: Boolean,
@IgnoredOnParcel val onClick: (gearCategoryViewModel: GearCategoryViewModel) -> Unit
) : DataBindingAdapter.LayoutViewModel(R.layout.gear_category_item), Parcelable
Run Code Online (Sandbox Code Playgroud)
我尝试使用@IgnoredOnParcel,并@Transient没有成功。
这是我得到的编译错误:
错误:(20,39)'Parcelize'不直接支持类型。如果希望使用“ writeValue()”序列化参数类型,请使用“ @RawValue”注释参数类型
而且此@RawValue注释也不起作用。
我创建了一个"全屏"DialogFragment,其中我添加了一个透明黑色背景.最终结果可以在下面的截图中看到:
这是我如何做到的:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
@Override
public void onStart() {
super.onStart();
Dialog dialog = getDialog();
if (dialog != null) {
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// if >= LOLLIPOP, then I color the the statusbar
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
dialog.getWindow().setStatusBarColor(SOME_COLOR_HERE);
}
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogFullScreen);
}
Run Code Online (Sandbox Code Playgroud)
这是我在setStyle()上设置的主题:
<style name="DialogFullScreen">
<item name="android:windowIsFloating">false</item>
<item name="android:windowContentOverlay">@null</item>
</style>
Run Code Online (Sandbox Code Playgroud)
这是我为片段扩充的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" …Run Code Online (Sandbox Code Playgroud) 在a中RecyclerView,我试图获得点击项目的X和Y位置.这是在我的适配器内:
@Override
public void onBindViewHolder(AlfabetoViewHolder holder, final int position) {
// setImage(holder.imageButton, images.get(position));
holder.imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
view.getX(); // This is 0, but it shouldn't be!
view.getY(); // This is also 0.
executaSomAnimacaoLetra(sounds.get(position), Utils.getResourceFromFile(popups.get(position), context), view); // I do some stuff here
}
});
}
Run Code Online (Sandbox Code Playgroud)
事实是,X和Y都总是返回0,他们不应该.我需要点击项目的X和Y来做一些动画.
我已经尝试将X和Y位置放在一个内部和一个OnGlobalLayoutListener内部OnPreDrawListener(当你需要活动的onCreate上的X和Y时它们都工作),但它们也返回0.
我正在使用GridLayoutManager我的RecyclerView:
recyclerView.setLayoutManager(new GridLayoutManager(Activity_alfabeto.this, 7, LinearLayoutManager.VERTICAL, false));
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.
我需要找到具有多个变量的等式的总可能不同解的数量.
例如:
1x + 2y + 8z = 13
Run Code Online (Sandbox Code Playgroud)
x,y和z值的不同组合总数是多少?我想不出一个算法来解决这个问题.我不需要打印答案,只需要不同组合的总数.系数和变量总是正数,也是最终数.
android ×4
kotlin ×2
algorithm ×1
data-binding ×1
java ×1
lambda ×1
math ×1
nexus-4 ×1
performance ×1