【问题标题】:CardView NullPointerException onClickListenerCardView NullPointerException onClickListener
【发布时间】:2018-06-01 22:28:36
【问题描述】:

我正在尝试在 CardView 上实现一个 setOnClickListener 方法,但每当我切换设备方向时,我都会收到一个空异常(如果我从纵向或横向模式开始,效果很好):

java.lang.RuntimeException:无法启动活动 组件信息{com.navajoinc.navajoinc.navfeedbackapp/com.navajoinc.navajoinc.navfeedbackapp.feedBackCardView}: java.lang.NullPointerException:尝试调用虚拟方法'void android.widget.LinearLayout.setOnClickListener(android.view.View$OnClickListener)' 在空对象引用上

我的 Java 类是:

public class feedBackCardView extends FragmentActivity {
    CardView neutralCustomer;
    CardView happyCustomer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_feed_back_card_view);

        neutralCustomer =  findViewById(R.id.neutralCustomer);
        happyCustomer =  findViewById(R.id.happyCard);

        neutralCustomer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {    
                Intent intent = new Intent(feedBackCardView.this, thank_you_positive.class);
                startActivity(intent);
            }
        });

        happyCustomer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {    
                Intent intent = new Intent(feedBackCardView.this, thank_you_positive.class);
                startActivity(intent);
            }
        });    
    }

    public void unsatisfiedCutomerSelectionMethod(View v){
        singleChoiceClass unsatisfied_customer_dialog = new singleChoiceClass();    
        unsatisfied_customer_dialog.show(getFragmentManager(), "unsatisfied_customer_dialog");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the main_menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {    
        switch(item.getItemId()) {
            case R.id.contactus:    
                Intent callIntent = new Intent(Intent.ACTION_DIAL);
                callIntent.setData(Uri.parse("tel:800.525.5097"));
                startActivity(callIntent);    
                break;
            case R.id.visitsite:
                Intent siteIntent = new Intent(Intent.ACTION_VIEW);
                siteIntent.setData(Uri.parse("http://navajoinc.com"));
                startActivity(siteIntent);   
                break;
            default:
                return super.onOptionsItemSelected(item);
        }   
        return true;
    }
}

活动 XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".feedBackCardView"
    android:padding="10dp"
    android:background="@color/colorWhiteSmoke"
    android:orientation="vertical">

    <ScrollView
        android:layout_width="match_parent"
        android:fillViewport="true"
        android:layout_height="match_parent" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:gravity="center">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="14dp"
                android:layout_gravity="center"
                android:text="Please tap a response :"
                android:textColor="@color/colorLightGrey" />

            <LinearLayout

                android:clipToPadding="false"
                android:gravity="center"
                android:clickable="false"
                android:layout_gravity="center"
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                <android.support.v7.widget.CardView
                    android:id="@+id/happyCard"
                    android:foreground="?android:selectableItemBackground"
                    android:clickable="true"
                    android:layout_width="160dp"
                    android:layout_height="190dp"
                    android:layout_margin="10dp"
                    app:cardElevation="3dp"
                   app:cardBackgroundColor="@color/cardview_light_background"
                    app:cardCornerRadius="3dp"
                    >

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="vertical"
                        android:background="@color/colorWhite"
                        android:gravity="center">
                        <ImageView
                            android:layout_width="64dp"
                            android:layout_height="64dp"
                            android:background="@drawable/happy_face"
                            android:padding="10dp"/>

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:textStyle="bold"
                            android:layout_marginTop="10dp"
                            android:textColor="@color/colorLightGrey"
                            android:text="Happy Customer"/>
                        <View
                            android:layout_width="match_parent"
                            android:layout_height="1dp"
                        android:background="@color/cardview_light_background"
                            android:layout_margin="2dp"/>
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:gravity="center"
                            android:textSize="11dp"
                            android:textColor="@color/colorTextGrey"
                            android:text="I have had a happy experience"/>


                    </LinearLayout>

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

            </LinearLayout>

            <LinearLayout
                android:id="@+id/neutralLayout"
                android:clipToPadding="false"
                android:gravity="center"
                android:orientation="horizontal"
                android:clickable="false"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                <android.support.v7.widget.CardView
                    android:id="@+id/neutralCustomer"
                    android:foreground="?android:selectableItemBackground"
                    android:clickable="true"
                    android:layout_width="160dp"
                    android:layout_height="190dp"
                    android:layout_margin="10dp"
                    app:cardElevation="3dp"
                    app:cardBackgroundColor="@color/cardview_light_background"
                    app:cardCornerRadius="3dp"
                    >

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="vertical"
                        android:background="@color/colorWhite"
                        android:gravity="center">
                        <ImageView
                            android:layout_width="64dp"
                            android:layout_height="64dp"
                            android:background="@drawable/neutral_face"
                            android:padding="10dp"/>

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:textStyle="bold"
                            android:layout_marginTop="10dp"
                            android:textColor="@color/colorLightGrey"
                            android:text="Neutral Customer"/>
                        <View
                            android:layout_width="match_parent"
                            android:layout_height="1dp"

    android:background="@color/cardview_light_background"
                            android:layout_margin="2dp"/>
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:gravity="center"
                            android:textSize="11dp"
                            android:textColor="@color/colorTextGrey"
                            android:text="My experience was neutral"/>


                    </LinearLayout>

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

            </LinearLayout>

            <LinearLayout
                android:clipToPadding="false"
                android:gravity="center"
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                <android.support.v7.widget.CardView

                    android:foreground="?android:selectableItemBackground"
                    android:clickable="true"
                    android:onClick="unsatisfiedCutomerSelectionMethod"
                    android:layout_width="160dp"
                    android:layout_height="190dp"
                    android:layout_margin="10dp"
                    app:cardElevation="3dp"
                    app:cardBackgroundColor="@color/cardview_light_background"
                    app:cardCornerRadius="3dp"
                    >

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="vertical"
                        android:background="@color/colorWhite"
                        android:gravity="center">
                        <ImageView
                            android:layout_width="64dp"
                            android:layout_height="64dp"
                            android:background="@drawable/angry_face"
                            android:padding="10dp"/>

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:textStyle="bold"
                            android:layout_marginTop="10dp"
                            android:textColor="@color/colorLightGrey"
                            android:text="Unsatisfied Customer"/>
                        <View
                            android:layout_width="match_parent"
                            android:layout_height="1dp"
                            android:background="@color/cardview_light_background"
                            android:layout_margin="2dp"/>
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:gravity="center"
                            android:textSize="11dp"
                            android:textColor="@color/colorTextGrey"
                            android:text="My experience was unpleasant"/>

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

我在 Stackoverflow 和其他网站上尝试了许多解决方案,但都没有奏效?你能帮忙解决这个问题吗?

【问题讨论】:

  • @IssmeilB。能不能创建两个不同布局的activity_feed_back_card_view 纵向和横向模式
  • 我已经有两种不同的布局了!奇怪的是它是如何在一个而不是另一个上工作的!

标签: android android-studio onclicklistener android-cardview


【解决方案1】:

我已经尝试了代码并且它正在工作。即使在旋转之后。但是,我将 onclick 方法的实现更改为仅显示 toast 而不是启动意图,因为您没有提供类。我也省略了所有与菜单相关的代码。

另外,如果您在代码中设置 onClickListener,为什么还要在卡片视图上设置 clickable=true 属性?这是多余的。另外,我看不出有任何理由在您的 &lt;LinearLayout&gt; 标签中声明 clickable=false。

我认为您没有提供足够的信息来定位错误,或者它与尚未提供的类有关。应用程序只是在旋转时崩溃,还是在您尝试点击某些东西后崩溃?您确定崩溃与轮换有关,而不是尝试启动新活动吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2021-02-05
    • 2017-05-11
    相关资源
    最近更新 更多