-1

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)
Ryan M
  • 18,333
  • 31
  • 67
  • 74
GermaineJason
  • 589
  • 6
  • 15

3 Answers3

2

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.

Raghunandan
  • 132,755
  • 26
  • 225
  • 256
1

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);
Hariharan
  • 24,741
  • 6
  • 50
  • 54
  • It will not work he have set the layout in his dialog explicitly. He is not using his `View layout` anywhere. – GrIsHu Apr 10 '14 at 09:44
  • 1
    @GrIsHu it will work. you are setting the layout to the dialog and you can find views under that view hierarchy – Raghunandan Apr 10 '14 at 09:44
  • @GrIsHu i check it. It's working correctly. Do you need screen shots that dialog shown. – Hariharan Apr 10 '14 at 09:46
0

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
GrIsHu
  • 29,068
  • 10
  • 64
  • 102