如何将自定义列表视图设置到对话框中

时间:2013-12-04 09:14:04

标签: android listview dialog

我正在开发一个应用程序,它从Web服务获取一些数据并显示在列表视图中。我已经实现了一个由BaseAdapter扩展的自定义适配器。在getView()方法中,我也对原始进行了膨胀..这些都是完美的。

我的问题是我已经实现了代码,当用户单击列表项时显示一个对话框,但现在我想显示另一个对话框,其中有一个自定义列表(当点击是按钮时)。我还想在listview中显示一些数据。 [我有一个填充了我想要的数据的ArrayList]。我在我的适配器类中编写代码。任何人都可以告诉我如何做到这一点?

这是我的代码:

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;


}

3 个答案:

答案 0 :(得分:3)

你是在正确的轨道上,这是我用来动态显示一个带有项目列表的对话框。

作为参考,此处提出了类似的问题: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
}

希望这可以解决你的问题。

答案 1 :(得分:0)

为了您的关注,我希望您知道创建自定义列表视图。

使用包含带有自定义列表视图的自定义对话框的下述代码。我希望你可以通过你的

执行适配器和模型部分
 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();
        }
    }
   });

答案 2 :(得分:0)

CUSTOM DIALOG BOX WITH CUSTOM LISTVIEW ::: 公共类MainActivity扩展了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 ::: 公共类AdapterListC扩展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;
}

}