如何在警告对话框中设置选定项?

3

我正在展示一个弹出对话框来选择列表。现在我想在弹出对话框中显示默认的列表项作为选中项。我已经将自定义适配器附加到列表上了。我在对话框中使用了setSingleChoiceItems。

为此,我将第二个参数设置为0,但是我仍然无法看到选中的项。

代码:

   ArrayList<ListData> allTables = new ArrayList<>();

        allTables = mListTableHelper.getAllList();

        final ListData taskList = new ListData();
        taskList.setId(100000000);
        taskList.setTitle("Default List");
        allTables.add(0, taskList);

        final AlertDialog.Builder alertDialog = new AlertDialog.Builder(AddTaskActivity.this);
        LayoutInflater inflater = getLayoutInflater();
        View convertView = (View) inflater.inflate(R.layout.tablelist, null, false);

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

        final ListItemAdapter adapter = new ListItemAdapter(AddTaskActivity.this,allTables);


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


                ListData listOject = new ListData();

                listOject = listData.get(which);

                mListId = listOject.getId();

                //   listOject = mListTableHelper.getList(mListId);

                String title = listOject.getTitle();

                list.setText(listOject.getTitle());

                dialog.dismiss();

            }

        }).create();

        alertDialog.show();

ListItemAdapter

我按照建议尝试了一下,但仍然没有得到所选项目。

public class ListItemAdapter extends ArrayAdapter{

int selectedItem;


    private static class ViewHolder {
        TextView title;
        RadioButton rb;
    }

    public ListItemAdapter(Context context, ArrayList<ListData> users,int selectedItem) {
        super(context, R.layout.list_item, users);
        this.selectedItem = selectedItem;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // Get the data item for this position
        ListData item = getItem(position);
        // Check if an existing view is being reused, otherwise inflate the view
        ViewHolder viewHolder; // view lookup cache stored in tag
        if (convertView == null) {
            viewHolder = new ViewHolder();
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.list_item, parent, false);
            viewHolder.title = (TextView) convertView.findViewById(R.id.list_item);
            viewHolder.rb = (RadioButton) convertView.findViewById(R.id.radioButton);

            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        // Populate the data into the template view using the data object
        viewHolder.title.setText(item.getTitle());

        // Return the completed view to render on screen
        return convertView;
    }

}

适配器初始化

   final ListItemAdapter adapter = new ListItemAdapter(AddTaskActivity.this,allTables,0);

编辑:

移除了.Create()方法。它在警告对话框初始化时显示错误。

    public void showCustomList() {

        mAllLists = new ArrayList<>();

        mAllLists = mListTableHelper.getAllList();

        final ListData taskList = new ListData();
        taskList.setId(100000000);
        taskList.setTitle("Default List");
        mAllLists.add(0, taskList);


        alertDialog = new AlertDialog(AddTaskActivity.this);


        LayoutInflater inflater = getLayoutInflater();
        View convertView = (View) inflater.inflate(R.layout.tablelist, null, false);

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

        final ListItemAdapter adapter = new ListItemAdapter(AddTaskActivity.this,mAllLists,selectedItem);


       alertDialog.setAdapter(adapter,null);

        alertDialog.show();

    }

这里出了什么问题?谢谢。

你能否通过代码向我解释一下?@KanchanChowdhury - user6265109
使用点击适配器类。 - DKV
抱歉,我无法查看您编辑后的问题。请提供原始文本以便我进行翻译。 - user6265109
你的列表行中有checkBox或radioButton吗?要使一行被选中,您需要一个radioButton或checkBox,但是在您的适配器中您只初始化了一个textview。 - Kanchan Chowdhury
我添加了单选按钮,但现在它不允许我选择项目。而且所有三个按钮都被选中了,我只想一次选择一个。在单击项目或按钮时没有任何反应,只有单选按钮被选中。@KanchanChowdhury - user6265109
显示剩余2条评论
1个回答

0
在您的适配器类中的getViewMethod方法末尾添加以下代码:
 viewHolder.rb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked) {
                if(!isFirstTime) {
                    YouDialogHoldingClass.itemSelected(position);
                }
                else {
                   isFirstTime = false;
                }
                //selectedItem = position;
                //notifyDataSetChanged();
            }
        }
    });

    if(position == selectedItem) {
        isFirstTime = true;
        viewHolder.rb.setChecked(true);
    } else {
        viewHolder.rb.setChecked(false);
    }
    return convertView;

不要使用singleChoiceItems()方法,而是使用以下方法:

 alertDialog.setAdapter(adapter, null);

在显示对话框的类中创建一个静态方法:
 public static void itemSelected(int tempPos) {
            // do what you want on item selection....
    }

显示对话框如下:
 public void showCustomList() {

    mAllLists = new ArrayList<>();

    mAllLists = mListTableHelper.getAllList();

    final ListData taskList = new ListData();
    taskList.setId(100000000);
    taskList.setTitle("Default List");
    mAllLists.add(0, taskList);


    AlertDialog.Builder builder = new AlertDialog.Builder(AddTaskActivity.this);

    LayoutInflater inflater = getLayoutInflater();
    View convertView = (View) inflater.inflate(R.layout.tablelist, null, false);

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

    final ListItemAdapter adapter = new ListItemAdapter(AddTaskActivity.this,mAllLists,selectedItem);

    builder.setAdapter(adapter, null);

    alertDialog = builder.create();

    alertDialog.show();

}

我想从listdata中获取listId,因为在我的代码中我已经获取了listId。如何在这里获取?因为我这里没有应用onClickLitener。@Kanchan Chowdhury - user6265109
我尝试过这个,但是dismiss方法在那里没有解决。@Kanchan Chowdhury - user6265109
我尝试这样做: alertDialog = new AlertDialog(AddTaskActivity.this); 它显示错误:android.support.v7.app.AlertDialog中的alertDialog具有protected访问权限。@Kanchan Chowdhury - user6265109
我已经做出了更改。对话框将在2秒内关闭,无需选择任何项目。@ Kanchan Chowdhury - user6265109
我不想要负面按钮。我只想在选择项目时解除。@Kanchan Chowdhury - user6265109
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接