如何从ArrayAdapter中关闭AlertDialog

时间:2013-02-10 12:02:48

标签: java android android-arrayadapter android-alertdialog onclicklistener

我使用ArrayAdapter创建了带有单选按钮的单选选项AlertDialog。选择“比率”时,是否可以忽略该警告对话框?我在ArrayAdapter类holder.name.setOnClickListener中有OnClick监听器,但我不知道该怎么做。

AlertDialog代码:

Builder builder = new Builder(serveris, useris, paswordas, BuildBuildingsViewActivity.this, USER_AGENT);

                        ArrayList<AvailableBuildings> availableBuildings = builder.checkForPossibleBuildings(pastatas.getBuildingLink());

                        ArrayAdapter<AvailableBuildings> adapter = new AvailableBuildingsAdapter(BuildBuildingsViewActivity.this, R.layout.choice_main, availableBuildings, host, curdid, pastatas.getBuildingLink());

                        new AlertDialog.Builder(BuildBuildingsViewActivity.this)
                        .setSingleChoiceItems(adapter, 0, null)
                        .setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton) {
                                dialog.dismiss();
                            }
                        })
                        .show();

ArrayAdapter代码:

public class AvailableBuildingsAdapter extends ArrayAdapter<AvailableBuildings> {

    public DBAdapterBuild db_build;

        public AvailableBuildingsAdapter(Context context, int textViewResourceId,ArrayList<AvailableBuildings> availableBuildings, String host, String curdid, String aiksteles_link) {
            super(context, textViewResourceId, availableBuildings);
            this.context = context;
            this.availableBuildings = new ArrayList<AvailableBuildings>();
            this.availableBuildings.addAll(availableBuildings);
            this.host = host;
            this.curdid = curdid;
            this.aiksteles_link = aiksteles_link;
            db_build = new DBAdapterBuild(context, host);
        }

        private String host;
        private Context context;
        private String curdid;
        private String aiksteles_link;
        private ArrayList<AvailableBuildings> availableBuildings;

        static class ViewHolder {
           RadioButton name;
        }

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

            ViewHolder holder;


            if (convertView == null) {
                LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = vi.inflate(R.layout.choice_row, null);

                holder = new ViewHolder();
                holder.name = (RadioButton) convertView.findViewById(R.id.building_name);
                convertView.setTag( holder );
                holder.name.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        db_build.open();
                        RadioButton name = (RadioButton) v;
                        AvailableBuildings building = (AvailableBuildings) name.getTag();
                        Log.e( "Available: ", ""+building.getAvailable_title()+building.getAvailable_code());
                        Log.e( "Available: ", ""+db_build.insertTitle(1, building.getAvailable_title(), aiksteles_link, curdid, 0, 1, building.getAvailable_type(), "3", building.getAvailable_code()));
                        db_build.close();


                    }
                });
            }  else {
                // view already defined, retrieve view holder
                holder = (ViewHolder) convertView.getTag();
            }

            AvailableBuildings building = availableBuildings.get(position);

            if ( building == null ) {

            }
            holder.name.setText(building.getAvailable_title());
            holder.name.setTag(building);

            return convertView;
        }
    }

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,传递给ArrayAdapter构造函数的Dialog对象,然后这样做:

holder.name.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        db_build.open();
                        RadioButton name = (RadioButton) v;
                        AvailableBuildings building = (AvailableBuildings) name.getTag();
                        Log.e( "Available: ", ""+building.getAvailable_title()+building.getAvailable_code());
                        Log.e( "Available: ", ""+db_build.insertTitle(1, building.getAvailable_title(), aiksteles_link, curdid, 0, 1, building.getAvailable_type(), "3", building.getAvailable_code()));
                        db_build.close();
                        dia.dismiss();
                    }
                });