首页 > 解决方案 > 我应该如何访问片段布局中的自定义视图?

问题描述

我有一个片段,其布局由一个自定义视图 ( MyCanvasView) 和一个按钮组成。我正在尝试通过MyCanvasView类中的 getter 方法访问变量。我可以访问按钮来制作OnClickListener,但尝试以相同的方式访问自定义视图不起作用。vMapView仍然null。如何从包含它的片段访问自定义视图?

在片段 java 文件中:

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.select_anchor, container, false);

    Button btnSubmitAnchor = (Button) v.findViewById(R.id.btn_submit_anchor);
    MyCanvasView vMapView = (MyCanvasView) v.findViewById(R.id.anchor_selection_view);

    btnSubmitAnchor.setOnClickListener((view) - > {

        receivedAnchor = vMapView.getTempAnchor();
        try {
            Log.i(TAG, "Received anchor:\n" + receivedAnchor.getName());
        } catch (Exception e) {
            Log.i(TAG, "no anchor was received");
        }
    });

    return v;
}

在 MyCanvasView.java 中:

public Anchor getTempAnchor() {
    return tempAnchor;
}

在 select_anchor.xml 中:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <view
        android:id="@+id/anchor_selection_view"
        class="com.decawave.argomanager.ui.view.MyCanvasView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentTop="true"
        android:layout_centerVertical="true"
        />

    <Button
        android:id="@+id/btn_submit_anchor"
        style="@style/MtrlBorderlessButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:layout_margin="5dp"
        android:text="@string/btn_submit_anchor" />


</RelativeLayout>

标签: javaandroid

解决方案


试试这样:

<com.decawave.argomanager.ui.view.MyCanvasView

    android:id="@+id/anchor_selection_view"

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_alignParentTop="true"
    android:layout_centerVertical="true"
    />

推荐阅读