3

I am developing a application which fetches some data from a web service and displays in a list view. I have implemented a custom adapter which is extended by BaseAdapter. In the getView() method I inflate the raw also.. Those are working perfectly.

My problem is I have implemented code to show a dialog box when user click on an list item, but now I want to show another dialog box which has a custom list inside it (when Yes button clicked). I also want to show some data in that listview. [I have a ArrayList filled with the data that I wanted] . I'm writing the code inside my adapter class. Can anyone give me some idea how to do it ?

This is my code:

public class NewsRowAdapter extends BaseAdapter  {


private Context mContext;
private Activity activity;
private static LayoutInflater inflater=null;
private ArrayList<HashMap<String, String>> data;
int resource;
    //String response;
    //Context context;
    //Initialize adapter
    public NewsRowAdapter(Context ctx,Activity act, int resource,ArrayList<HashMap<String, String>> d) {
        super();
        this.resource=resource;
        this.data = d;
        this.activity = act;
        this.mContext = ctx;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }


    public void dialogshow(final String Date,final String Start,final String End){

        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(activity);
        alertDialogBuilder.setTitle("Confirm your Action!");

        // set dialog message
        alertDialogBuilder
            .setMessage("Click yes to exit!")
            .setCancelable(false)
            .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    // if this button is clicked, close
                    // current activity
                    //MainActivity.this.finish();

                //  Toast.makeText(mContext, "Yes clicked", Toast.LENGTH_LONG).show();

                    //check similer records

                //  ShortList sh = new ShortList();

                //  ArrayList<HashMap<String, String>> duplicateList; 
                //  duplicateList=sh.getDuplicated(Date, Start, End);


                    //if duplicates > 1 then show the popup list
            //      if(duplicateList.size()>1){
                    AlertDialog.Builder alertDialogBuilder2 = new AlertDialog.Builder(activity);

                    LayoutInflater infl = activity.getLayoutInflater();




                    //View vi = infl.inflate(id, root)





                    alertDialogBuilder2.setView(infl.inflate(R.layout.dialog_row, null))
                    .setPositiveButton("Accept", new DialogInterface.OnClickListener() {

                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    // TODO Auto-generated method stub
                                    Toast.makeText(mContext, "Accepted", Toast.LENGTH_LONG).show();
                                }
                            })
                            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    // TODO Auto-generated method stub
                                    dialog.dismiss();
                                }
                            });

                    alertDialogBuilder2.show();


                //  }



                }
              })
              .setNegativeButton("No",new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,int id) {
                        // if this button is clicked, just close
                        // the dialog box and do nothing
                        dialog.cancel();
                    }
                });
        alertDialogBuilder.show();

    }



@Override
public View getView(final int position, View convertView, final ViewGroup parent) {


    View vi = convertView;
    if(convertView==null)
        vi = inflater.inflate(R.layout.row,null);


        final TextView firstname = (TextView) vi.findViewById(R.id.fname);
        final TextView lastname = (TextView) vi.findViewById(R.id.lname);
        final TextView startTime = (TextView) vi.findViewById(R.id.stime);
        final TextView endTime = (TextView) vi.findViewById(R.id.etime);
        final TextView date = (TextView) vi.findViewById(R.id.blank);
        final ImageView img = (ImageView) vi.findViewById(R.id.list_image);


        HashMap<String, String> song = new HashMap<String, String>();
        song =data.get(position);

        firstname.setText(song.get(MainActivity.TAG_PROP_FNAME));
        lastname.setText(song.get(MainActivity.TAG_PROP_LNAME));
        startTime.setText(song.get(MainActivity.TAG_STIME));
        endTime.setText(song.get(MainActivity.TAG_ETIME));
        date.setText(song.get(MainActivity.TAG_DATE));
        //imageLoader.DisplayImage(song.get(CustomizedListView.KEY_THUMB_URL), img);

        Button accept = (Button) vi.findViewById(R.id.button1);
        accept.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                final int x = (int) getItemId(position);
                /*Intent zoom=new Intent(mContext, Profile.class);
                zoom.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
                zoom.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                mContext.startActivity(zoom);*/

                // get the intent from the hashmap check if there is similar date and time.
                //then store them in a list or array.

                String getDate = (String) date.getText();
                String getStartTime = startTime.getText().toString();
                String getEndTime = endTime.getText().toString();

                dialogshow(getDate,getStartTime,getEndTime);
            }
    });


        vi.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                String getFname = firstname.getText().toString();
                Toast.makeText(parent.getContext(), "view clicked: "+getFname , Toast.LENGTH_SHORT).show();

                //get the id of the view
                //check the id of the request
                //call the web service acording to the id

                Intent zoom=new Intent(parent.getContext(), Profile.class);   
                parent.getContext().startActivity(zoom);



            }
        });

        return vi;


}
K.C.
  • 2,084
  • 2
  • 25
  • 38
Gishantha Darshana
  • 163
  • 1
  • 6
  • 17

3 Answers3

3

You are on the right track, Here is what i used to dynamically display a Dialog with a list of items in it.

For reference a similar Question was asked here : Android custom list dialog

    //String[] list_data; Preloaded with a String array

    final CharSequence[] items = new CharSequence[list_data.length];

            for (int i = 0; i < list_data.length; i++) {
               items[i] = list_data[i];
            }

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Select the data you want");
    builder.setItems(items, new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            //Get the id of the item
            diag_callback();

        }

    });

    AlertDialog alert = builder.create();
    alert.show();

}

public void diag_callback() {
    //Do someting when the user has made his selection
}

Hope this sorts out your problem.

Community
  • 1
  • 1
Mushroomzier
  • 108
  • 6
  • hi.. here i have a question...since i inflating my custom list in getview method in adapter class how can i directly set items ? i have my data like this : [{Date=11/18/13, EndTime=09:00 AM, StartTime=08:00 AM}, {Date=11/18/13, EndTime=09:00 AM, StartTime=08:00 AM}, {Date=11/18/13, EndTime=09:00 AM, StartTime=08:00 AM}] i want to show them in a dialg box (inside the listview) – Gishantha Darshana Dec 04 '13 at 09:53
  • Are you using SQLite? If you are, just save your data inside the database and edit them using queries, that way you will always have direct access to your data, You can then write a method to update your view so that the new data in the database is reflected. – Mushroomzier Dec 04 '13 at 12:12
  • If you are not using SQLite, consider implementing it in your app. Here is a reference site that has a great android SQLite tutorial [Here](http://hmkcode.com/android-simple-sqlite-database-tutorial). – Mushroomzier Dec 04 '13 at 12:19
  • You should try and store the data you get from the server in your SQLite database, it allows you to change data locally, and its less taxing on the android devices memory. Once you have set the variables you want, you can use a syncronize method to upload the changes. It will make your life a hell of a lot easier – Mushroomzier Dec 05 '13 at 05:56
  • thank you.. but according to my client needs i just want to show them in the list..but i'll try it..because i wanna be a good programmer.. – Gishantha Darshana Dec 05 '13 at 06:04
0

For your concern I hope that you know creating customized list view.

Fallow undermentioned code that contains customized dialog with customized list view. I hope you can perform Adapter and model part by your's

 final Dialog new_dialog = new Dialog(getParent());
 new_dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
 new_dialog.setContentView(R.layout.customize_dialog_list_view);
 new_dialog.setCancelable(false);
 cuc = new CommanUtilityClass();
 SharedPreferences sp = getSharedPreferences("provider",0);
   String services = sp.getString("services","");
   Log.i("Servicesss",bAllServices);

   TextView service = (TextView) new_dialog.findViewById(R.id.cdlv_service_provider);
   TextView hour = (TextView) new_dialog.findViewById(R.id.cdlv_working_hours);

   TextView appointment_time = (TextView) new_dialog.findViewById(R.id.cdlv_appoint_time);
   TextView appointment_date = (TextView) new_dialog.findViewById(R.id.cdlv_appoint_date);

   String[] ampm = myTiming[which].split(":");

   Log.d("xxxooo", ampm[0]);

   appointment_time.setText(Html.fromHtml("<b>Appointment time :</b>" + myTimingToShow[which].split("/")[0]));
   appointment_date.setText(Html.fromHtml("<b>Appointment date :</b>" + selected));

   service.setText(Html.fromHtml("<b>Service provider :</b>"+ cuc.toTheUpperCase(bsp_name)));

   hour.setText(Html.fromHtml("<b>Working hours :</b>"+ cuc.toTheUpperCase(bsp_availability)));

   lv = (ListView) new_dialog.findViewById(R.id.cdlv_list);

   CustomDialogArrayAdapter cdaa = new CustomDialogArrayAdapter(getApplicationContext(),m_ArrayList);

   lv.setAdapter(cdaa);

   new_dialog.show();

   ImageButton btn_cdlv_cancel = (ImageButton) new_dialog.findViewById(R.id.cdlv_cancel);

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

   lv.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(
            AdapterView<?> arg0,
            View arg1,
            int arg2,
            long arg3) {

        Log.d("checkforbookedslots", booked_slots);

        final_time_selected = myTiming[which];
        String final_duration = m_ArrayList.get(arg2).provider_service_duration;
        Log.d("adiadicheck", check_for_booking_list);
        if (checkOverlapSlot(final_time_selected,final_duration)) {
            Log.d("gp","seven12aa");
            SharedPreferences sp = getSharedPreferences("booking_detail",0);
            SharedPreferences.Editor editor = sp.edit();
            editor.putString("provider_service",m_ArrayList.get(arg2).provider_service);
            editor.putString("provider_service_duration",m_ArrayList.get(arg2).provider_service_duration);
            editor.putString("provider_service_price",m_ArrayList.get(arg2).provider_service_price);
            editor.putString("service_id",m_ArrayList.get(arg2).provider_service_id);
            editor.commit();

            SessionManagement sm = new SessionManagement(getParent());
            // sm.checkLogin();

            if (sm.isLoggedIn()) {
                Log.d("viv2","1");
                Intent edit = new Intent(SelectedService.this,UserLoggedActivity.class);
                TabGroupActivity parentActivity = (TabGroupActivity) getParent();
                parentActivity.startChildActivity("UserLoggedActivity",edit);
            } else {
                Log.d("viv2","2");
                Intent edit = new Intent(SelectedService.this,UserNoLoggedActivity.class);
                TabGroupActivity parentActivity = (TabGroupActivity) getParent();
                parentActivity.startChildActivity("UserNoLoggedActivity",edit);
            }
            new_dialog.dismiss();
        }
    }
   });
Niranj Patel
  • 32,980
  • 10
  • 97
  • 133
AndroidHacker
  • 3,596
  • 1
  • 25
  • 45
0

CUSTOM DIALOG BOX WITH CUSTOM LISTVIEW ::: public class MainActivity extends Activity {

private Button btnOpenDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final ArrayList<String> strArrlst = new ArrayList<String>();
    for (int i = 0; i < 15; i++) {
        strArrlst.add("Number: " + i);
    }

    btnOpenDialog = (Button) findViewById(R.id.btn_open_dialog);
    btnOpenDialog.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Log.d("Dialog box is btn click", "");
            final Dialog dialog = new Dialog(MainActivity.this);
            Toast.makeText(getApplicationContext(), "btn is click", Toast.LENGTH_SHORT).show();
            // tell the Dialog to use the dialog.xml as it's layout
            // description
            dialog.setContentView(R.layout.custom_dailog_box);
            dialog.setTitle("Android Custom Dialog Box");
            TextView txt = (TextView) dialog.findViewById(R.id.txt);
            txt.setText("This is an Android custom Dialog Box Example! Enjoy!");

            ListView dialogLIst = (ListView) dialog.findViewById(R.id.lstvw_open_custom_dialog);
            // ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            // android.R.layout.simple_list_item_1, android.R.id.text1,
            // values);
            // dialogLIst.setAdapter(adapter);
            AdapterListC adapListC = new AdapterListC(getApplicationContext(), strArrlst);
            dialogLIst.setAdapter(adapListC);

            dialogLIst.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    // TODO Auto-generated method stub
                    dialog.dismiss();
                    Toast.makeText(getApplicationContext(), "This is click position is" + position, Toast.LENGTH_SHORT).show();
                }

            });
            dialog.show();
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

ADAPTER CLASS::: public class AdapterListC extends BaseAdapter {

public AdapterListC(Context context_, ArrayList<String> arrlstString) {
    super();
    this.context_ = context_;
    this.arrlstString = arrlstString;
    mInflater = (LayoutInflater) context_.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

Context context_;
ArrayList<String> arrlstString;
private LayoutInflater mInflater;

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

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return arrlstString.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    Viewolder holder = null;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.listitem, null);
        holder = new Viewolder();
        holder.txtName = (TextView) convertView.findViewById(R.id.txt_listitem);

        convertView.setTag(holder);
    } else {
        holder = (Viewolder) convertView.getTag();
    }
    holder.txtName.setText(arrlstString.get(position).toString());

    return convertView;
}

class Viewolder {
    TextView txtName;
}

}

Anand Saggam
  • 57
  • 1
  • 8