android 带有多个图像按钮的自定义对话框

android custom dialog with multiple image buttons

我正在尝试实现一个共享操作,根据用户的选择,他会得到一个包含特定共享操作的弹出对话框(通过特定的不同应用程序 - 所需屏幕:desired layout)。

我想要 6 个 ImageButtons。

到现在为止,我可以获得弹出窗口 window(但是 onclick 侦听器 - 就像死了一样)或者(另一方面)应用程序会崩溃。

我的弹出窗口布局是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorAccent">


    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/viber"
        android:id="@+id/viber_share_button"
        android:layout_below="@+id/twitter_share_button"
        android:background="@color/colorAccent"
        android:layout_alignEnd="@+id/twitter_share_button"
        android:layout_marginBottom="10dp"
        android:layout_marginLeft="10dp"
        android:layout_toEndOf="@+id/facebook_share_button" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/twitter"
        android:id="@+id/twitter_share_button"
        android:background="@color/colorAccent"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="10dp"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"/>

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/facebook_messenger"
        android:id="@+id/messanger_share_button"
        android:background="@color/colorAccent"
        android:layout_marginLeft="10dp"
        android:layout_alignTop="@+id/viber_share_button"
        android:layout_alignEnd="@+id/facebook_share_button" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/instagram"
        android:id="@+id/instagram_share_button"
        android:background="@color/colorAccent"
        android:layout_marginLeft="10dp"
        android:layout_alignParentTop="true"
        android:layout_toEndOf="@+id/twitter_share_button"
        android:layout_marginStart="31dp"
        android:layout_marginTop="10dp"/>

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/whatsapp"
        android:id="@+id/whatsapp_share_button"
        android:background="@color/colorAccent"
        android:layout_alignTop="@+id/viber_share_button"
        android:layout_alignEnd="@+id/instagram_share_button"
        android:layout_toEndOf="@+id/viber_share_button"
        android:layout_alignStart="@+id/instagram_share_button" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/facebook"
        android:id="@+id/facebook_share_button"
        android:background="@color/colorAccent"
        android:layout_marginLeft="10dp"
        android:layout_alignParentTop="true"
        android:layout_toStartOf="@+id/twitter_share_button"
        android:layout_marginEnd="39dp"
        android:layout_marginTop="10dp"/>
</RelativeLayout>

我使用的代码是:

private void displayIntentOptions(final Bitmap bitmap){



        LayoutInflater layoutInflater = LayoutInflater.from(this);
        View promptView = layoutInflater.inflate(R.layout.share_buttons, null);
        final AlertDialog alertD = new AlertDialog.Builder(this).create();
        alertD.setView(promptView);
        alertD.show();
        ImageButton facebook_button = (ImageButton)findViewById(R.id.facebook_share_button);
        ImageButton twitter_button = (ImageButton)findViewById(R.id.twitter_share_button);
        ImageButton intagram_button = (ImageButton)findViewById(R.id.instagram_share_button);
        ImageButton messanger_button = (ImageButton)findViewById(R.id.messanger_share_button);
        ImageButton viber_button = (ImageButton)findViewById(R.id.viber_share_button);
        ImageButton whatsapp_button = (ImageButton)findViewById(R.id.whatsapp_share_button);

        facebook_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
        twitter_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                shareTwitter(v, bitmap);//just a sample of what I want to do
            }
        });
        intagram_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
        messanger_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
        viber_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
        whatsapp_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
    }

此代码根本不起作用。如果有人可以帮助我,我将不胜感激。由于在常规对话框中我无法拥有所有这些 ImageButton,因此我尝试制作一个自定义对话框。 此外,我想知道这是否是一个好的做法,或者我应该为此实施一个新的 Intent。

提前致谢。

你需要改变一件小事

final AlertDialog alertD = new AlertDialog.Builder(this).create();
alertD.setView(promptView);
alertD.show();

现在

  final AlertDialog.Builder alertD = new AlertDialog.Builder(this);
  alertD.setView(promptView);
  alertD.show();

更新

这个也有问题

ImageButton facebook_button = (ImageButton)findViewById(R.id.facebook_share_button);

它将为空,因为您查看的是 Activity(或片段)视图,而不是 AlertDialog 视图。你需要这样设置

ImageButton facebook_button = (ImageButton)promptView.findViewById(R.id.facebook_share_button);