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)

总结:

  1. 重命名您的班级,在末尾添加Spec(但不要重命名CAFAssessmentListItem.onEditTextClick调用)。
  2. @Prop添加到Assessment参数并从onCreateLayout中删除片段参数
  3. 仅使用资源ID和小部件中的相应方法替换cafFragment.getActivity().getResources().调用
  4. .handle(textInputHandle)添加到TextInput小部件
  5. 清理设置颜色值

以上是关于Builder中的Click Handler不能应用于空白的主要内容,如果未能解决你的问题,请参考以下文章

java日志中的处理者(handler)问题

firebasex 错误:类 Builder 中的构造函数 Builder 不能应用于给定类型

NET问答: 如何从 event 中移除所有的 handler ?

Vue中的native修饰符解析

JAVA高级特性--String/StringBuffer/Builder

如何在 click Handler 函数上调用 AG-Grid 的 gridready 事件