Builder中的Click Handler不能应用于空白
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Builder中的Click Handler不能应用于空白相关的知识,希望对你有一定的参考价值。
我正在移动应用程序(android)中工作,并开始学习光刻框架,我为组件内部的特定小部件编写了一个单击处理程序。但是显示错误
“ Builder不能应用于void”为什么出现此问题是有原因的?
如何解决该问题。我需要另一个问题。如何获取文本输入值谢谢您的回复
package com.hotfoot.rapid.aubank.sbl.fragment.qde;
import android.graphics.Color;
import android.os.Build;
import android.text.InputType;
import android.text.Layout;
import androidx.annotation.RequiresApi;
import com.facebook.litho.Border;
import com.facebook.litho.ClickEvent;
import com.facebook.litho.Column;
import com.facebook.litho.Component;
import com.facebook.litho.ComponentContext;
import com.facebook.litho.Handle;
import com.facebook.litho.annotations.LayoutSpec;
import com.facebook.litho.annotations.OnCreateLayout;
import com.facebook.litho.annotations.OnEvent;
import com.facebook.litho.annotations.Param;
import com.facebook.litho.annotations.Prop;
import com.facebook.litho.widget.Text;
import com.facebook.litho.widget.TextInput;
import com.facebook.yoga.YogaEdge;
import com.hotfoot.rapid.au.msme.app.pojo.caf.Assessment;
import com.hotfoot.rapid.aubank.sbl.R;
import java.util.ArrayList;
import java.util.List;
@LayoutSpec
public class CAFAssessmentListItem
@RequiresApi(api = Build.VERSION_CODES.P)
@OnCreateLayout
static Component onCreateLayout(
ComponentContext c,
CAFAssessmentFragment cafFragment,
Assessment assessment,
@Prop String n)
List<String> districtNames = new ArrayList();
districtNames.add("Chennai");
districtNames.add("Erode");
districtNames.add("Coimbatore");
districtNames.add("Tirunelveli");
final Handle textInputHandle = new Handle();
return Column.create(c)
.child(
Text.create(c)
.text(cafFragment.getActivity().getResources().getString(R.string.ro_assessment))
.marginDip(YogaEdge.ALL, 10.0f)
.textAlignment(Layout.Alignment.ALIGN_LEFT)
.textSizeSp(18.0f)
.textStyle(1)
.textColor(
cafFragment.getActivity().getResources().getColor(R.color.input_text_color)))
.child(
Text.create(c)
.text("CUSTOMER NAME")
.marginDip(YogaEdge.ALL, 10.0f)
.textAlignment(Layout.Alignment.ALIGN_NORMAL)
.textSizeSp(12.0f)
.textColor(cafFragment.getActivity().getResources().getColor(R.color.text_color)))
.child(
TextInput.create(c)
.hint("")
.marginDip(YogaEdge.ALL, 10.0f)
.inputType(InputType.TYPE_CLASS_TEXT)
.background(
cafFragment.getActivity().getResources().getDrawable(R.drawable.ic_apply_line))
.multiline(false)
.maxLines(1))
.child(
Text.create(c)
.text("CUSTOMER ADDRESS")
.paddingDip(YogaEdge.ALL, 1.0f)
.marginDip(YogaEdge.ALL, 10.0f)
.textAlignment(Layout.Alignment.ALIGN_NORMAL)
.textSizeSp(12.0f)
.textColor(cafFragment.getActivity().getResources().getColor(R.color.text_color)))
.child(
TextInput.create(c)
.hint("")
.marginDip(YogaEdge.ALL, 10.0f)
.inputType(InputType.TYPE_CLASS_TEXT)
.multiline(true)
.maxLines(5)
.background(
cafFragment.getActivity().getResources().getDrawable(R.drawable.bg_edt_popup)))
.child(
Text.create(c)
.text("CUSTOMER CONTACT NO")
.marginDip(YogaEdge.ALL, 10.0f)
.textAlignment(Layout.Alignment.ALIGN_NORMAL)
.textSizeSp(12.0f)
.textColor(cafFragment.getActivity().getResources().getColor(R.color.text_color)))
.child(
TextInput.create(c)
.hint("")
.marginDip(YogaEdge.ALL, 10.0f)
.inputType(InputType.TYPE_CLASS_PHONE)
.background(
cafFragment.getActivity().getResources().getDrawable(R.drawable.ic_apply_line))
.multiline(false)
.maxLines(1))
.child(
Text.create(c)
.text("CUSTOMER BUSINESS")
.marginDip(YogaEdge.ALL, 10.0f)
.textAlignment(Layout.Alignment.ALIGN_NORMAL)
.textSizeSp(12.0f)
.textColor(cafFragment.getActivity().getResources().getColor(R.color.text_color)))
.child(
TextInput.create(c)
.hint("")
.marginDip(YogaEdge.ALL, 10.0f)
.inputType(InputType.TYPE_CLASS_TEXT)
.background(
cafFragment.getActivity().getResources().getDrawable(R.drawable.ic_apply_line))
.multiline(false)
.maxLines(1))
.child(
Text.create(c)
.text("LOAN AMOUNT APPLIED")
.marginDip(YogaEdge.ALL, 10.0f)
.textAlignment(Layout.Alignment.ALIGN_NORMAL)
.textSizeSp(12.0f)
.textColor(cafFragment.getActivity().getResources().getColor(R.color.text_color)))
.child(
TextInput.create(c)
.hint("")
.marginDip(YogaEdge.ALL, 10.0f)
.inputType(InputType.TYPE_CLASS_NUMBER)
.background(
cafFragment.getActivity().getResources().getDrawable(R.drawable.ic_apply_line))
.multiline(false)
.maxLines(1))
.child(
Text.create(c)
.text("TENURE")
.marginDip(YogaEdge.ALL, 10.0f)
.textAlignment(Layout.Alignment.ALIGN_NORMAL)
.textSizeSp(12.0f)
.textColor(cafFragment.getActivity().getResources().getColor(R.color.text_color)))
.child(
TextInput.create(c)
.hint("")
.marginDip(YogaEdge.ALL, 10.0f)
.inputType(InputType.TYPE_CLASS_NUMBER)
.background(
cafFragment.getActivity().getResources().getDrawable(R.drawable.ic_apply_line))
.multiline(false)
.maxLines(1))
.child(
Text.create(c)
.text("EMi")
.marginDip(YogaEdge.ALL, 10.0f)
.textAlignment(Layout.Alignment.ALIGN_NORMAL)
.textSizeSp(12.0f)
.textColor(cafFragment.getActivity().getResources().getColor(R.color.text_color)))
.child(
TextInput.create(c)
.hint("")
.marginDip(YogaEdge.ALL, 10.0f)
.inputType(InputType.TYPE_CLASS_NUMBER)
.background(
cafFragment.getActivity().getResources().getDrawable(R.drawable.ic_apply_line))
.multiline(false)
.maxLines(1))
.child(
Text.create(c)
.text("PD WITH")
.marginDip(YogaEdge.ALL, 10.0f)
.textAlignment(Layout.Alignment.ALIGN_NORMAL)
.textSizeSp(12.0f)
.textColor(cafFragment.getActivity().getResources().getColor(R.color.text_color)))
.child(
com.facebook.litho.widget.Spinner.create(c)
.marginDip(YogaEdge.ALL, 10.0f)
.options(districtNames)
.selectedOption(districtNames.get(1))
.border(
Border.create(c)
.widthDip(YogaEdge.ALL, 1)
.color(YogaEdge.ALL, Color.BLACK)
.build()))
.child(
Text.create(c)
.text("PLACE OF PD-ADDRESS")
.marginDip(YogaEdge.ALL, 10.0f)
.textAlignment(Layout.Alignment.ALIGN_NORMAL)
.textSizeSp(12.0f)
.textColor(cafFragment.getActivity().getResources().getColor(R.color.text_color)))
.child(
com.facebook.litho.widget.Spinner.create(c)
.marginDip(YogaEdge.ALL, 10.0f)
.options(districtNames)
.selectedOption(districtNames.get(1))
.border(
Border.create(c)
.widthDip(YogaEdge.ALL, 1)
.color(YogaEdge.ALL, Color.BLACK)
.build()))
.child(
Text.create(c)
.text("PURPOSE OF LOAN")
.marginDip(YogaEdge.ALL, 10.0f)
.textAlignment(Layout.Alignment.ALIGN_NORMAL)
.textSizeSp(12.0f)
.textColor(cafFragment.getActivity().getResources().getColor(R.color.text_color)))
.child(
com.facebook.litho.widget.Spinner.create(c)
.marginDip(YogaEdge.ALL, 10.0f)
.options(districtNames)
.selectedOption(districtNames.get(1))
.border(
Border.create(c)
.widthDip(YogaEdge.ALL, 1)
.color(YogaEdge.ALL, Color.BLACK)
.build()))
.child(
Text.create(c)
.text("SAVE")
.textSizeSp(14.0f)
.paddingDip(YogaEdge.ALL, 12.0f)
.textAlignment(Layout.Alignment.ALIGN_CENTER)
.marginDip(YogaEdge.ALL, 10.0f)
.backgroundColor(cafFragment.getActivity().getResources().getColor(R.color.orange))
.textColor(cafFragment.getActivity().getResources().getColor(R.color.white))
.border(
Border.create(c)
.widthDip(YogaEdge.ALL, 1)
.color(YogaEdge.ALL, Color.parseColor("#F36F21"))
.build()))
.child(
Text.create(c)
.text("NEXT")
.textSizeSp(14.0f)
.paddingDip(YogaEdge.ALL, 12.0f)
.textAlignment(Layout.Alignment.ALIGN_CENTER)
.marginDip(YogaEdge.ALL, 10.0f)
.backgroundColor(cafFragment.getActivity().getResources().getColor(R.color.purple))
.textColor(cafFragment.getActivity().getResources().getColor(R.color.white))
.border(
Border.create(c)
.widthDip(YogaEdge.ALL, 1)
.color(YogaEdge.ALL, Color.parseColor("#FFA500"))
.build()))
.clickHandler(CAFAssessmentListItem.onEditTextClick(c, textInputHandle))
.build();
@OnEvent(ClickEvent.class)
static void onEditTextClick(ComponentContext c, @Param Handle textInputHandle)
String customer = TextInput.getText(c, textInputHandle).toString();
首先,您的LayoutSpec类的名称应以Spec
结尾,并且您永远不应直接调用其方法。当您的Spec类命名为MyComponentSpec
时,编译器将生成一个名为MyComponent
的真正的光刻组件实现(注意,没有后缀Spec
)。以及您应该使用的此类的方法。即,在您的示例中,您引用的是CAFAssessmentListItem.onEditTextClick(c, textInputHandle)
,这是Spec
的方法(您手动编写),但是您应该使用Component的方法(将由编译器生成)。
第二,该组件的所有输入都应标记为@Prop
,即@Prop Assessment assessment
。再次,因为您自己不应该使用onCreateLayout
方法-您将使用生成的ComponentBuilder。喜欢:
CAFAssessmentListItem.create(c)
.assessment(myAssessment)
.n(myString)
.build()
第三,您不需要您的片段即可检索资源。有一些特定的方法,即
Text.create(c)
.testRes(resId)
.textColorRes(colorResId)
.backgroundColorRes(colorResId2)
第四,您从未与textInputHandle
小部件绑定TextInput
来获取onClick
上的任何内容。签出此文档:https://fblitho.com/docs/trigger-events。您需要将.handle(textInputHandle)
添加到TextInput
。
最后,当您已经具有字符串颜色.color(Color.parseColor("#F36F21"))
的颜色的值时,就不需要解析该颜色–您只需使用十六进制int .color(0xFFF36F21)
。
总结:
- 重命名您的班级,在末尾添加
Spec
(但不要重命名CAFAssessmentListItem.onEditTextClick
调用)。 - 将
@Prop
添加到Assessment
参数并从onCreateLayout
中删除片段参数 - 仅使用资源ID和小部件中的相应方法替换
cafFragment.getActivity().getResources().
调用 - 将
.handle(textInputHandle)
添加到TextInput
小部件 - 清理设置颜色值
以上是关于Builder中的Click Handler不能应用于空白的主要内容,如果未能解决你的问题,请参考以下文章
firebasex 错误:类 Builder 中的构造函数 Builder 不能应用于给定类型
NET问答: 如何从 event 中移除所有的 handler ?