【问题标题】:Alert dialog with custom list view带有自定义列表视图的警报对话框
【发布时间】:2016-06-19 20:55:56
【问题描述】:

我想创建一个带有自定义列表视图的警报对话框。为此,我为列表视图创建了自定义布局和适配器。 我想要带有单选项目的警报对话框。所以我为对话框设置了一个适配器。现在我想从数组列表中获取选定的项目?

  selectTable.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final TimeTable table = new TimeTable();

                List<TimeTable> allTables = new ArrayList<TimeTable>();

                TimeTableHelper timeTableHelper = new TimeTableHelper(AddEventActivity.this);

                allTables = timeTableHelper.getAllTables();



                allTables.add(table);

                final List<TimeTable> t = th.getAllTables();
                for (TimeTable cn : allTables) {
                    String log = "Id: " + cn.getId() + " ,Title: " + cn.getTitle() +
                            "Status: " + cn.getStatus() + ",Color: " + cn.getTableColor();

                    Log.d("Data ", log);
                }
                final AlertDialog.Builder alertDialog = new AlertDialog.Builder(AddEventActivity.this);
                LayoutInflater inflater = getLayoutInflater();
                View convertView = (View) inflater.inflate(R.layout.tablelist, null, false);

                lv = (ListView) convertView.findViewById(R.id.tableslist);

                final CustomAlertAdapter adapter = new CustomAlertAdapter(allTables, AddEventActivity.this);


                alertDialog.setView(convertView);

                                   alertDialog.setView(customView);

               alertDialog.setSingleChoiceItems(adapter, selected, new DialogInterface.OnClickListener() {
                   @Override
                   public void onClick(DialogInterface dialog, int which) {


                       final List<TimeTable> tables = new ArrayList<TimeTable>();

                       // what to do here to get item of TimeTable list?
                   }
               });

                alertDialog.show();
            }
        });

编辑:

           alertDialog.setSingleChoiceItems(adapter, selected, new DialogInterface.OnClickListener() {
               @Override
               public void onClick(DialogInterface dialog,int which) {


                   TimeTable selectedItem = allTables.get(which);

                   selectedItem.getId();
                   txtTable.setText(selectedItem.getTitle());
                   Log.d("TableId", String.valueOf(selectedItem));

                   dialog.dismiss();

               }
           });

            alertDialog.show();
        }

customAlertAdapter

public class CustomAlertAdapter extends BaseAdapter{


        List<TimeTable> mData;
        Context mContext;
        LayoutInflater inflater;
        public CustomAlertAdapter(List<TimeTable> data, Context context) {
            mData = data;
            mContext = context;
            inflater = LayoutInflater.from(context);
        }
        @Override
        public int getCount() {
            return mData.size();
        }

        @Override
        public Object getItem(int arg0) {
            return null;
        }

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

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

            if (convertView == null ) {

                LayoutInflater mInflater = (LayoutInflater) mContext
                        .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

                convertView = mInflater.inflate(R.layout.alertlistrow, null);

            }

            TextView tvTitle = (TextView) convertView.findViewById(R.id.tableTitle);
            Button color = (Button)convertView.findViewById(R.id.selectColor);


            tvTitle.setText(mData.get(position).getTitle());

            ((GradientDrawable)color.getBackground()).setColor(mData.get(position).getTableColor());

            return convertView;
        }

}

【问题讨论】:

    标签: java android listview android-studio android-alertdialog


    【解决方案1】:

    which参数表示选中项的索引。所以你可以写:

    TimeTable selectedItem = allTables.get(which);
    

    另外,我认为当你调用setSingleChoiceItem方法时,不需要为对话框提供自定义视图。

    这是一个带有字符串数组的工作示例:

    AlertDialog dialog = new AlertDialog.Builder(getActivity()).setTitle("Dialog").setSingleChoiceItems(new String[]{"Item 1", "Item 2"}, 0, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        switch (which) {
                            case 0:
                                //Item 1 was selected
                                break;
                            case 1:
                               //Item 2 was selected
                                break;
                        }
                        dialog.dismiss();
                    }
                }).create();
    dialog.show();
    

    你可以传递ListAdapter而不是String数组。

    【讨论】:

    • 项目没有被点击。如果我点击项目,什么都不会发生。
    • @Sid 尝试从警报对话框中删除自定义视图。
    • 如果我直接添加数组列表它会显示错误它不能解析监听器
    • 这就是我所做的,请检查已编辑的问题。但点击时什么也没有发生。我尝试添加 .create() 作为您的代码。
    • 尝试字符串数组示例只是为了测试,如果它工作正常,可能问题出在您的适配器上。您在适配器中的行是否有任何可点击的组件,例如按钮或复选框?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 2011-09-29
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多