Android - Executing a custom listview in a custom dialog properly

android, dialog, listview

Solution

Are you doing the following? You will need to inflate the layout file `dialog_main`, find the `ListView`, set an adapter and an OnItemClickListener for it. After this, you can use the dialog's `setContentView(View)` method to get the list to display.

private void showDialog(){

    final Dialog dialog = new Dialog(this);

    View view = getLayoutInflater().inflate(R.layout.dialog_main, null);

    ListView lv = (ListView) view.findViewById(R.id.custom_list);

    // Change MyActivity.this and myListOfItems to your own values
    CustomListAdapterDialog clad = new CustomListAdapterDialog(MyActivity.this, myListOfItems);

    lv.setAdapter(clad);

    lv.setOnItemClickListener(........);

    dialog.setContentView(view);

    dialog.show();

}

By the way, your adapter looks alright. It isn't working because you're not giving it anything to work on.

Problem

I have an application where I would want to display a custom list view consisting of two textViews inside a custom dialog box in android. So far, I'm having a difficult time figuring out how to connect the two and generate the contents of the dialog box. I tried to follow custom listView tutorials with the hopes of just setting the dialog adapter to it but to no avail. So far, this is what I have so far: This is list_row_dialog.xml, the layout for the row containing two textviews: ``` <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:minHeight="50dp" android:orientation="horizontal" android:padding="5dip" > <TextView android:id="@+id/unit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textStyle="bold" android:typeface="sans" /> <TextView android:id="@+id/quantity" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:textColor="#343434" android:textSize="12sp" /> </RelativeLayout> ``` And here is the dialog_main.xml file, the layout file that I want the dialog box to use, it's basically a listView. ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/custom_list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:dividerHeight="1dp" /> </LinearLayout> ``` And here's CustomListAdapterDialog.java, I'm not sure if I even need to use this to display data on the dialog box: ``` public class CustomListAdapterDialog extends BaseAdapter { private ArrayList<ItemClass> listData; private LayoutInflater layoutInflater; public CustomListAdapterDialog(Context context, ArrayList<ItemClass> listData) { this.listData = listData; layoutInflater = LayoutInflater.from(context); } @Override public int getCount() { return listData.size(); } @Override public Object getItem(int position) { return listData.get(position); } @Override public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = layoutInflater.inflate(R.layout.list_row_dialog, null); holder = new ViewHolder(); holder.unitView = (TextView) convertView.findViewById(R.id.unit); holder.quantityView = (TextView) convertView.findViewById(R.id.quantity); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.unitView.setText(listData.get(position).getVariant().toString()); holder.quantityView.setText(listData.get(position).getUnit().toString()); return convertView; } static class ViewHolder { TextView unitView; TextView quantityView; } } ``` Initially, I tried this code to display the dialog box: ``` private void showDialog(){ final Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.dialog_main); dialog.show(); } ``` But it only shows, one blank row, it is very clear that I am not populating it properly. Any ideas anyone? Also, I can populate the dialog boxes in the `showDialog()` function since I also have the data I want to populate with in the same java class.

Original source