简体   繁体   中英

how to add custom ListView in alert dialog android

I have one scenario in which,when I click on Button I want the AlertDialog to popup. AlertDialog is a custom alert dialog as it has custom Listview .

I am using the following code to assign the AlertDialog OnClick of button

 top.setOnClickListener(new OnClickListener() {
 Context mcontext;
 @Override
 public void onClick(View arg0) {
 // TODO Auto-generated method stub
 LayoutInflater li = LayoutInflater.from(getActivity());
 View view= li.inflate(R.layout.topingslist, null);

 AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
 alertDialogBuilder.setView(view);
 ListView lv2 = (ListView) getActivity().findViewById(R.id.toplist);
 ArrayList<SearchResultsToping> results1 = new ArrayList<SearchResultsToping>();
 SearchResultsToping sr1;                                               
 sr1 = new SearchResultsToping();
 sr1.setToppingname("cheese");
 results1.add(sr1);
 MyCustomBaseAdapterTop arrayAdapter=new MyCustomBaseAdapterTop(getActivity(), results1);
 lv2.setAdapter(arrayAdapter);
 lv2.setOnItemSelectedListener(new OnItemSelectedListener() {

    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
    // TODO Auto-generated method stub
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub

    }

    });

   alertDialogBuilder
        .setCancelable(false)
        .setPositiveButton("OK",new DialogInterface.OnClickListener() 
                  public void onClick(DialogInterface dialog,int id) {
                      })
        .setNegativeButton("Cancel",  new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface dialog,int id) {
                    dialog.cancel()
               }
            });

        // create alert dialog
        AlertDialog alertDialog = alertDialogBuilder.create();
        // show it
        alertDialog.show();
    }
  });

This is my customBaseadapter to customlistview

public class MyCustomBaseAdapterTop extends BaseAdapter {
    private static ArrayList<SearchResultsToping> searchArrayListtop;
    private LayoutInflater mInflater;
     Context ctx=null;

     public MyCustomBaseAdapterTop(Activity activty, ArrayList<SearchResultsToping> results1) {
          searchArrayListtop = results1;

          this.ctx=activty;
          mInflater = activty.getLayoutInflater();  

    }


    @Override
    public int getCount() {
        // TODO Auto-generated method stub
    //  return 0;
        return searchArrayListtop.size();
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;

        //return searchArrayListtop.get(arg0);
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int arg0, View convertView, ViewGroup arg2) {
        // TODO Auto-generated method stub

        final ViewHolder holder;
        if (convertView == null) {

            Log.d("base", "listbase");
       convertView = mInflater.inflate(R.layout.each_toping, null);
       holder = new ViewHolder();


      holder.txttopname = (TextView) convertView.findViewById(R.id.topname);


       convertView.setTag(holder);
      } else {
       holder = (ViewHolder) convertView.getTag();
      }

      holder.txttopname.setText(searchArrayListtop.get(arg0).getToppingname());
      return convertView;

}
static class ViewHolder {
        TextView txttopname;
        }

}

This is topinglist.xml file

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
      <ListView 
            android:id="@+id/toplist" 
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:cacheColorHint="#0000"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp" />        
</LinearLayout>

The line on which I am setting the Adapter to Listview lv2.setAdapter(arrayAdapter); is giving me NullPointerException please help me to achieve this.

Within alert dialog builder change below line

ListView lv2 = (ListView) getActivity().findViewById(R.id.toplist);

with

ListView lv2 = (ListView) view.findViewById(R.id.toplist);

Use DialogFragment

add listview into it set adapter to it. and do whatever you want to do

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM