Question

I am having a difficult time displaying a Custom Dialog. I have also attempted to create it in a custom class that extends Dialog.

Dialog XML

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <!-- android:background="@drawable/image_bg" -->

    <ImageView
        android:id="@+id/image_display"
        android:layout_width="250dip"
        android:layout_height="250dip" />

    <TextView
        android:id="@+id/title_display"
        style="@android:style/TextAppearance.Medium"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:padding="5dp" />
</LinearLayout>

<TextView
    android:id="@+id/desc_display"
    style="@android:style/TextAppearance.Small"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:visibility="gone" />

<TextView
    android:id="@+id/url_display"
    style="@android:style/TextAppearance.Small"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:visibility="gone" />

<TextView
    android:id="@+id/loc_display"
    style="@android:style/TextAppearance.Small"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:visibility="gone" />

<RatingBar
    android:id="@+id/priority_display"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:isIndicator="true"
    android:numStars="5"
    android:padding="5dp"
    android:stepSize="1.0"
    android:rating="2.0"
    android:visibility="gone" />

<TextView
    android:id="@+id/price_display"
    style="@android:style/TextAppearance.Small"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:visibility="gone" />

<TextView
    android:id="@+id/ean_display"
    style="@android:style/TextAppearance.Small"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:visibility="gone" />

<TextView
    android:id="@+id/date_display"
    style="@android:style/TextAppearance.Small"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:visibility="gone" />

<Button
    android:id="@+id/button_display"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="OK" />

Dialog creation

protected void createDialog(Wish w)
    {

        // custom dialog
        final Dialog dialog = new Dialog((Activity) mContext);
        View layout = ((Activity) mContext).findViewById(R.layout.wish_dialog);
        dialog.setContentView(R.layout.wish_dialog);
        dialog.setTitle("Wish");

        ImageView image = (ImageView) ((Activity) mContext).findViewById(R.id.image_display); 
        TextView title = (TextView)  ((Activity) mContext).findViewById(R.id.title_display);
        TextView desc = (TextView)  ((Activity) mContext).findViewById(R.id.desc_display);
        TextView loc = (TextView)  ((Activity) mContext).findViewById(R.id.loc_display);
        TextView url = (TextView)  ((Activity) mContext).findViewById(R.id.url_display);
        RatingBar rating = (RatingBar)  ((Activity) mContext).findViewById(R.id.priority_display);
        TextView price = (TextView)  ((Activity) mContext).findViewById(R.id.price_display);
        TextView barcode = (TextView)  ((Activity) mContext).findViewById(R.id.ean_display);
        TextView date = (TextView)  ((Activity) mContext).findViewById(R.id.date_display);
        Button button = (Button)  ((Activity) mContext).findViewById(R.id.button_display);

        title.setText(w.getTitle().toUpperCase());
        title.setTypeface(null, Typeface.BOLD);

        if (w.getImage() != null)
        {
            image.setImageBitmap(decodeBitmap(w.getImage(), image.getWidth(), image.getHeight()));
        }
        else
        {
            Drawable drawable = mContext.getResources().getDrawable(
                    mContext.getResources().getIdentifier("image_preview", "drawable",
                            mContext.getPackageName()));
            image.setImageDrawable(drawable);

        }

        if (w.getDesc() != null)
        {
            desc.setVisibility(View.VISIBLE);
            desc.setText(w.getDesc());
        }

        if (w.getLocation() != null)
        {
            loc.setVisibility(View.VISIBLE);
            loc.setText(w.getLocation());
        }
        else if (w.getUrl() != null)
        {
            url.setVisibility(View.VISIBLE);
            url.setText(w.getUrl());
        }

        if(w.getPriority() != 0)
        {
            rating.setVisibility(View.VISIBLE);
            rating.setRating(w.getPriority());
        }

        dialog.show();
        Log.i("Click List", "Show");


        button.setOnClickListener(new View.OnClickListener() 
        {

            @Override
            public void onClick(View v)
            {
                dialog.dismiss();

            }
        });
    }

Log Display

04-10 10:27:26.588: E/AndroidRuntime(12035): FATAL EXCEPTION: main
04-10 10:27:26.588: E/AndroidRuntime(12035): java.lang.NullPointerException
04-10 10:27:26.588: E/AndroidRuntime(12035):    at com.example.youwish.WishAdapter.createDialog(WishAdapter.java:167)
04-10 10:27:26.588: E/AndroidRuntime(12035):    at com.example.youwish.WishAdapter$1.onClick(WishAdapter.java:72)
04-10 10:27:26.588: E/AndroidRuntime(12035):    at android.view.View.performClick(View.java:4475)
04-10 10:27:26.588: E/AndroidRuntime(12035):    at android.view.View$PerformClick.run(View.java:18786)
04-10 10:27:26.588: E/AndroidRuntime(12035):    at android.os.Handler.handleCallback(Handler.java:730)
04-10 10:27:26.588: E/AndroidRuntime(12035):    at android.os.Handler.dispatchMessage(Handler.java:92)
04-10 10:27:26.588: E/AndroidRuntime(12035):    at android.os.Looper.loop(Looper.java:176)
04-10 10:27:26.588: E/AndroidRuntime(12035):    at android.app.ActivityThread.main(ActivityThread.java:5419)
04-10 10:27:26.588: E/AndroidRuntime(12035):    at java.lang.reflect.Method.invokeNative(Native Method)
04-10 10:27:26.588: E/AndroidRuntime(12035):    at java.lang.reflect.Method.invoke(Method.java:525)
04-10 10:27:26.588: E/AndroidRuntime(12035):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
04-10 10:27:26.588: E/AndroidRuntime(12035):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
04-10 10:27:26.588: E/AndroidRuntime(12035):    at dalvik.system.NativeStart.main(Native Method)
Was it helpful?

Solution

Your views belong to the dialog layout. So initialize using dialog.findViewById

ImageView image = (ImageView)dialog.findViewById(R.id.image_display);

Similarly the other views that belong to the dialog layout.

Get rid of

View layout = ((Activity) mContext).findViewById(R.layout.wish_dialog);

findViewById looks for a view with the id mentioned in the current view hierarchy. You set the custom layout to the dialog. So use the dialog object to find views.

OTHER TIPS

Try this..

Change beloe code

        ImageView image = (ImageView) ((Activity) mContext).findViewById(R.id.image_display); 
        TextView title = (TextView)  ((Activity) mContext).findViewById(R.id.title_display);
        TextView desc = (TextView)  ((Activity) mContext).findViewById(R.id.desc_display);
        TextView loc = (TextView)  ((Activity) mContext).findViewById(R.id.loc_display);
        TextView url = (TextView)  ((Activity) mContext).findViewById(R.id.url_display);
        RatingBar rating = (RatingBar)  ((Activity) mContext).findViewById(R.id.priority_display);
        TextView price = (TextView)  ((Activity) mContext).findViewById(R.id.price_display);
        TextView barcode = (TextView)  ((Activity) mContext).findViewById(R.id.ean_display);
        TextView date = (TextView)  ((Activity) mContext).findViewById(R.id.date_display);
        Button button = (Button)  ((Activity) mContext).findViewById(R.id.button_display);

as

    ImageView image = (ImageView) dialog.findViewById(R.id.image_display); 
    TextView title = (TextView)  dialog.findViewById(R.id.title_display);
    TextView desc = (TextView)  dialog.findViewById(R.id.desc_display);
    TextView loc = (TextView)  dialog.findViewById(R.id.loc_display);
    TextView url = (TextView)  dialog.findViewById(R.id.url_display);
    RatingBar rating = (RatingBar)  dialog.findViewById(R.id.priority_display);
    TextView price = (TextView)  dialog.findViewById(R.id.price_display);
    TextView barcode = (TextView)  dialog.findViewById(R.id.ean_display);
    TextView date = (TextView)  dialog.findViewById(R.id.date_display);
    Button button = (Button)  dialog.findViewById(R.id.button_display);

and also remove

View layout = ((Activity) mContext).findViewById(R.layout.wish_dialog);

In your code you have inflated the your view separately and set the layout in your dialog explicitly. So there is not use of View layout in your code as you have explicitly set the layout dialog.setContentView(R.layout.wish_dialog); whereas it should be like dialog.setContentView(layout);

You need to change your below code:

  // custom dialog
    final Dialog dialog = new Dialog((Activity) mContext);
    View layout = ((Activity) mContext).findViewById(R.layout.wish_dialog);
    dialog.setContentView(R.layout.wish_dialog);
    dialog.setTitle("Wish");

    ImageView image = (ImageView) ((Activity) mContext).findViewById(R.id.image_display); 
    TextView title = (TextView)  ((Activity) mContext).findViewById(R.id.title_display);
    TextView desc = (TextView)  ((Activity) mContext).findViewById(R.id.desc_display);
    TextView loc = (TextView)  ((Activity) mContext).findViewById(R.id.loc_display);
    ..................................

Change above code as below:

   // custom dialog
    final Dialog dialog = new Dialog((Activity) mContext);
   LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View layout = mInflater.inflate(R.layout.wish_dialog);
    dialog.setContentView(layout);
    dialog.setTitle("Wish");

    ImageView image = (ImageView)layout.findViewById(R.id.image_display); 
    TextView title = (TextView) layout .findViewById(R.id.title_display);
    TextView desc = (TextView) layout .findViewById(R.id.desc_display);
    TextView loc = (TextView)  layout .findViewById(R.id.loc_display);
    TextView url = (TextView) layout .findViewById(R.id.url_display);
    RatingBar rating = (RatingBar)layout .findViewById(R.id.priority_display);
    TextView price = (TextView)layout .findViewById(R.id.price_display);
    TextView barcode = (TextView)layout .findViewById(R.id.ean_display);
    TextView date = (TextView) layout .findViewById(R.id.date_display);
    Button button = (Button) layout .findViewById(R.id.button_display
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top