简体   繁体   English

如何引用膨胀的视图元素?

[英]How to reference the inflated view elements?

I need some help on this. 我需要一些帮助。 I'm inflating a view. 我夸大了看法。 The view is basically a card view with a spinner in it. 该视图基本上是其中包含微调器的卡片视图。

The view is inflated on a button click like this: 像这样单击按钮会放大视图:

itineraryDetailLL = (LinearLayout) findViewById(R.id.itineraryDetailLinearlayout);
View childView = getLayoutInflater().inflate(R.layout.cardview, null);
itineraryDetailLL.addView(childView);

Now the problem is that whenever I click the spinner in the first inflated card view it works fine but on clicking on the spinner in the second inflated view it gives me the following error: 现在的问题是,每当我在第一个膨胀的卡视图中单击微调器时,它都可以正常工作,但是在第二个膨胀的视图中单击微调器时,会出现以下错误:

09-11 10:54:44.976 31698-31698/com.application.marketvisit E/InputEventReceiver: Exception dispatching input event.
09-11 10:54:44.976 31698-31698/com.application.marketvisit E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
09-11 10:54:44.986 31698-31698/com.application.marketvisit E/MessageQueue-JNI: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Filter.filter(java.lang.CharSequence, android.widget.Filter$FilterListener)' on a null object reference
                                                                                   at android.widget.AutoCompleteTextView.performFiltering(AutoCompleteTextView.java:861)
                                                                                   at com.weiwangcn.betterspinner.library.material.MaterialBetterSpinner.onFocusChanged(MaterialBetterSpinner.java:49)
                                                                                   at android.view.View.handleFocusGainInternal(View.java:4962)
                                                                                   at android.view.View.requestFocusNoSearch(View.java:7678)
                                                                                   at android.view.View.requestFocus(View.java:7657)
                                                                                   at android.view.View.requestFocus(View.java:7624)
                                                                                   at android.view.View.requestFocus(View.java:7603)
                                                                                   at com.weiwangcn.betterspinner.library.material.MaterialBetterSpinner.onTouchEvent(MaterialBetterSpinner.java:74)
                                                                                   at android.view.View.dispatchTouchEvent(View.java:8471)
                                                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                   at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2369)
                                                                                   at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1719)
                                                                                   at android.app.Activity.dispatchTouchEvent(Activity.java:2742)
                                                                                   at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
                                                                                   at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
                                                                                   at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2330)
                                                                                   at android.view.View.dispatchPointerEvent(View.java:8666)
                                                                                   at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4123)
                                                                                   at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3989)
                                                                                   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544)
                                                                                   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597)
                                                                                   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563)
                                                                                   at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3680)
                                                                                   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3571)
                                                                                   at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3737)
                                                                                   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544)
                                                                                   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597)
                                                                                at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.
09-11 10:54:44.988 31698-31698/com.application.marketvisit E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             Process: com.application.marketvisit, PID: 31698
                                                                             java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Filter.filter(java.lang.CharSequence, android.widget.Filter$FilterListener)' on a null object reference
                                                                                 at android.widget.AutoCompleteTextView.performFiltering(AutoCompleteTextView.java:861)
                                                                                 at com.weiwangcn.betterspinner.library.material.MaterialBetterSpinner.onFocusChanged(MaterialBetterSpinner.java:49)
                                                                                 at android.view.View.handleFocusGainInternal(View.java:4962)
                                                                                 at android.view.View.requestFocusNoSearch(View.java:7678)
                                                                                 at android.view.View.requestFocus(View.java:7657)
                                                                                 at android.view.View.requestFocus(View.java:7624)
                                                                                 at android.view.View.requestFocus(View.java:7603)
                                                                                 at com.weiwangcn.betterspinner.library.material.MaterialBetterSpinner.onTouchEvent(MaterialBetterSpinner.java:74)
                                                                                 at android.view.View.dispatchTouchEvent(View.java:8471)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
                                                                                 at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2369)
                                                                                 at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1719)
                                                                                 at android.app.Activity.dispatchTouchEvent(Activity.java:2742)
                                                                                 at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
                                                                                 at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
                                                                                 at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2330)
                                                                                 at android.view.View.dispatchPointerEvent(View.java:8666)
                                                                                 at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4123)
                                                                                 at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3989)
                                                                                 at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544)
                                                                                 at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597)
                                                                                 at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563)
                                                                                 at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3680)
                                                                                 at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3571)
                                                                                 at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3737)
                                                                                 at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544)
                                                                                at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java

This is the cardview.xml that I'm inflating: 这是我要夸张的cardview.xml:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="400dp"
        card_view:cardElevation="5dp"
        card_view:cardUseCompatPadding="true"
        card_view:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="8dp"
        android:layout_marginLeft="8dp"
        card_view:layout_constraintLeft_toRightOf="parent"
        android:layout_marginStart="8dp">

<com.weiwangcn.betterspinner.library.material.MaterialBetterSpinner
                android:id="@+id/zonePlanItineraryspinner"
                android:layout_width="240dp"
                android:layout_height="wrap_content"
                android:hint="Select a Zone"
                app:met_floatingLabel="normal"
                android:layout_below="@id/deletePlanItinerary"
                android:layout_marginLeft="20dp" />

    </android.support.v7.widget.CardView>

</LinearLayout>

As much as possible, don't use multiple IDs in one layout, Android only detects one, hence the null object reference in your stack trace. 尽可能不要在一个布局中使用多个ID,Android仅检测一个ID,因此在堆栈跟踪中null object referencenull object reference

According to the API guides: 根据API指南:

An ID need not be unique throughout the entire tree, but it should be unique within the part of the tree you are searching (which may often be the entire tree, so it's best to be completely unique when possible). ID不必在整个树中都是唯一的,但它在您要搜索的树的一部分中应该是唯一的(它可能通常是整个树,因此最好在可能的情况下完全唯一)。

https://developer.android.com/guide/topics/ui/declaring-layout.html#id https://developer.android.com/guide/topics/ui/declaring-layout.html#id

EDIT 编辑

Since you're inflating new layouts with the same IDs, try the following: 由于您要膨胀具有相同ID的新布局,请尝试以下操作:

View childView = getLayoutInflater().inflate(R.layout.cardview, null);
MaterialBetterSpinner spnr = childView.findViewById(R.id.zonePlanItineraryspinner);
spnr.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // New CardView layout spinner code goes here...
    } 
});

You should use the newly inflated layout to find the views by ID. 您应该使用新增加的布局按ID查找视图。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM