【问题标题】:Clickable ImageView inside ButtonButton 内可点击的 ImageView
【发布时间】:2018-03-11 16:05:24
【问题描述】:

每当我将 ImageView 设置为可点击时,它都会崩溃。按钮内不可能有一个可点击的 ImageView 还是只是做错了?我已经将图像设置为可点击。

** 已编辑 **

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

btPlumbers.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(HomeActivity.this);
            View layoutPlumber = getLayoutInflater().inflate(R.layout.layout_plumber, null);
            bottomSheetDialog.setContentView(layoutPlumber);

            BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from((View) layoutPlumber.getParent());
            bottomSheetBehavior.setPeekHeight(
                    (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics())
            );

            ImageView imgPTap = (ImageView) findViewById(R.id.imageview_pTap);

            imgPTap.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //
                }
            });

            bottomSheetDialog.show();
        }
    });

错误如下:

 E/UncaughtException: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                     at com.fixitph.client.HomeActivity$1.onClick(HomeActivity.java:189)
                     at android.view.View.performClick(View.java:4781)
                     at android.view.View$PerformClick.run(View.java:19900)
                     at android.os.Handler.handleCallback(Handler.java:739)
                     at android.os.Handler.dispatchMessage(Handler.java:95)
                     at android.os.Looper.loop(Looper.java:159)
                     at android.app.ActivityThread.main(ActivityThread.java:5541)
                     at java.lang.reflect.Method.invoke(Native Method)
                     at java.lang.reflect.Method.invoke(Method.java:372)
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:975)
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)

XML 文件

<android.support.constraint.ConstraintLayout 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">
    <ImageView
        android:id="@+id/imageview_pTap"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_column="0"
        android:layout_gravity="center"
        android:layout_row="0"
        android:clickable="true"
        android:padding="15dp"
        app:srcCompat="@drawable/ic_plumber_64dp" />
</android.support.constraint.ConstraintLayout>

用 XML 编辑

【问题讨论】:

标签: java android android-imageview android-button


【解决方案1】:

btPlumbersimgPtap 都为空。在调用setOnClickListener()之前尝试为它们分配一个值

你可以这样做:

btPlumbers = findViewById(R.id.<your_view_id>);
imgPtap = findViewById(R.id.<your_view_id>);

【讨论】:

  • 是的,我都在 onCreate 内部进行了初始化,按钮的位置相同(btPlumbers)
  • @BlueCollar,再次检查上面的代码是您在创建时的代码,btPlumbers 肯定没有初始化。
  • 嗨@JoelLibby 我尝试在 onCreate 内部但不在 Button 内部初始化它,并且在 Button 内部给出相同的错误
【解决方案2】:

代替

  ImageView imgPTap = (ImageView) findViewById(R.id.imageview_pTap);

在你的活动中试试这个。

  ImageView imgPTap = (ImageView) layoutPlumber.findViewById(R.id.imageview_pTap);

我仍然将此问题标记为重复问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多