Событие щелкает на элементах управления CustomView Android - React Native - PullRequest
0 голосов
/ 28 октября 2019

Я рендеринг файла android layout.xml на реакцию native.При попытке реализовать события для представлений внутри layout.xml на android. Я не могу его получить

my customview.xml макет.

    <?xml version="1.0" encoding="utf-8"?>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height='40dp'
    android:orientation="horizontal"

    >
    <TextView android:id="@+id/multipleCameraText"
        android:layout_marginTop="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello, Text View from Native"
        />

        <Button android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:height="40dp"
            android:layout_height="wrap_content"
            android:text="Button 1"

            />
        <Button android:id="@+id/button2"
            android:layout_marginLeft="20dp"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:height="40dp"
            android:text="Button 2"

            />
</LinearLayout>

my customview.java

package com.typesproject;

import android.content.Context;
import android.widget.LinearLayout;

import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.uimanager.events.RCTEventEmitter;


public class CustomView2 extends LinearLayout {
        private Context context;
        public CustomView2(Context context) {
            super(context);
            this.context=context;
            this.init();
        }

        public void init() {
            //modified here.
            inflate(context, R.layout.customview2, this);
        }

        public void onReceiveNativeEvent() {
            WritableMap event = Arguments.createMap();
            event.putString("message", "MyMessage");
            ReactContext reactContext = (ReactContext)getContext();
            reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(
                    getId(),
                    "topChange",
                    event);
        }
    }

Я хочу реализовать нажатия кнопок на двух кнопках (button1 и button2) и изменить текстпросмотр внутреннего текста (множественный текст).

my customViewManager.java

package com.typesproject;

import android.view.View;

import com.facebook.react.uimanager.SimpleViewManager;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.annotations.ReactProp;
import com.facebook.react.views.image.ReactImageView;

import javax.annotation.Nonnull;

public class CustomViewManager extends SimpleViewManager<CustomView> {

    public  static final String Custom_View="CustomView";

    @Nonnull
    @Override
    public String getName() {
        return Custom_View;
    }

    @Nonnull
    @Override
    protected CustomView createViewInstance(@Nonnull ThemedReactContext reactContext) {
        return new CustomView(reactContext);
    }
}

Пожалуйста, дайте мне знать, как мы можем добиться отдельных событий для кнопок и просмотра текста.

1 Ответ

0 голосов
/ 28 октября 2019

макет не может использовать в этой ситуации. Вы должны определить класс для представления, а затем использовать его в ViewManager.
Что касается вашей ситуации, сначала вы можете определить класс, который расширяет Button,

public class CustomButton extends Button {}

, затем в CustomViewManagerвыставьте реквизиты и событие

@ReactProp(name = "text")
  public void setContenxt(CustomButton button, @Nullable String text) {
    view.setSource(sources);
  }

@ReactProp(name = "text")
  public void setContenxt(CustomButton button, @Nullable String text) {
    button.setText(sources);
  }

, как для события, вы можете прочитать официальный API .

Если вы хотите определить представление, которое выглядит как макет XML,вид должен расширять Linearlayou или ViewGroup. этот эффект понимает, является сложным. соответствующие знания - это пользовательское представление Android. вам, возможно, придется переопределить onDraw, onMeasure, onLayout.

вы можете взглянуть на класс ReactViewGroup, он даст вам некоторые подсказки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...