Android - 对话框中的多个选项(不是复选框)

时间:2015-01-05 06:16:42

标签: android dialog

我正在编写一段代码,每当点击它时都会显示一个alertdialog,它会显示一个可点击的字符串列表(我保存在stringList中),

我希望用户只能选择其中一个选项,我已尝试在互联网上找到答案,大部分教程仅显示如何设置复选框,我们可以选择多个选项。

然后我尝试了这个:

    else {
            CharSequence cs[] = myList.toArray(new CharSequence[countReceiver]);

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

            builder.setTitle("Choose Member : ");
            builder.setItems(cs, new DialogInterface.OnClickListener() {
                @Override
                        public void onClick(
                             //Will get the value of the clicked option;
                               }});
                                builder.show();

                            }

但是这段代码有一个错误,它确实显示我保存在stringList中的字符串(已经转换为CharSequence),但每当我重新选择按钮时,它会使选项加倍,

示例:

第一次单击 - 出现对话框,选项为A,B

第二次单击 - 出现对话框,其中包含A,B,A,B选项。

请问各位帮我找到解决方案吗?

真的很感激,

提前谢谢

1 个答案:

答案 0 :(得分:1)

根据我对你问题的理解。您希望显示一个选项列表,该选项不应具有复选框,但具有多选选项。

如果是这样,你需要在运行时完成所有操作,我会给你一个示例试试, 步骤1: 使用

为AlertDialog创建布局
<ScrollView   
        android:id="@+id/sc_dynamic_holder"           
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:scrollbars="vertical">
        <LinearLayout                   
            android:id="@+id/mScrollTerminal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

        </LinearLayout>


    </ScrollView> 

第2步:在活动中

mTerminalLayout = (LinearLayout) findViewById(R.id.mScrollTerminal);

步骤3:使用此代码将项目添加到LinearLayout ViewGroup

private void loadTotalTime() {
    // TODO Auto-generated method stub
    final String[] array = getResources().getStringArray(R.array.cooking_time);
    if(array.length != 0 ){
        List<String> beans = new ArrayList<String>(selectedTotalTimeItem.values());
        mTextItem = new TextView[array.length];
        mView = new View[array.length];
        for(int i=0;i<array.length;i++){
            mLayoutParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);                
            mLayoutParamsView = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 1);                    
            mView[i] = new View(this);
            mView[i].setBackgroundColor(Color.GRAY);
            mView[i].setLayoutParams(mLayoutParamsView);

            mTextItem[i] = new TextView(this);                  
            mTextItem[i].setLayoutParams(mLayoutParams);                  
            mTextItem[i].setTextColor(getResources().getColor(R.color.black));
            mTextItem[i].setPadding(10, 15, 20, 15);
            mTextItem[i].setSingleLine();
            mTextItem[i].setTextSize(15);
            if(typePTS55F != null)
            mTextItem[i].setTypeface(typePTS55F,Typeface.BOLD);
            mTextItem[i].setTag(String.valueOf(i));
            mTextItem[i].setGravity(Gravity.CENTER_VERTICAL);
            if(beans != null){
                for(int j=0;j<beans.size();j++){
                    if(beans.get(j).equalsIgnoreCase(array[i])){
                        mTextItem[i].setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.tick_blue_icon, 0);//
                    }
                }
            }
            mTextItem[i].setText(array[i]+" "+getResources().getString(R.string.minutes));//mSetPickUpTerminal.get(i).get("description")                    
            mTerminalLayout.addView(mTextItem[i]);
            mTerminalLayout.addView(mView[i]);
        }
    }

    if(mTextItem != null){
        //selectedMealTYpeItem.clear();         
        for(int i=0;i<mTextItem.length;i++){
            mTextItem[i].setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Log.i("Before Selecetd Item", v.getTag()+""+selectedTotalTimeItem);
                    mSelecetdItem = (String) v.getTag();
                    Log.i("Selecetd Item", mSelecetdItem);
                    if(selectedTotalTimeItem.containsKey(Integer.parseInt((String) v.getTag()))){
                        Log.i("hashMap","ContainsKey");
                        selectedTotalTimeItem.remove( Integer.parseInt((String) v.getTag()));
                        mTextItem[Integer.parseInt(mSelecetdItem)].setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
                    }else{

                        mTextItem[Integer.parseInt((String)v.getTag())].setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.tick_blue_icon, 0);;
                        selectedTotalTimeItem.put( Integer.parseInt((String) v.getTag()), array[(Integer.parseInt(mSelecetdItem))]);
                    }
                    Log.i("After Selecetd Item ","  "+ selectedTotalTimeItem);
                }
            });
        }
    }
}

步骤4:完成项目选择以获得所选项目的结果后,

List<String> beans = new ArrayList<String>(selectedTotalTimeItem.values());
            StringBuilder stringBuilder = new StringBuilder();

            for(int i=0;i<beans.size();i++){                
                stringBuilder.append(beans.get(i)+",");             
            }
            if(stringBuilder.length()>0){
                category = stringBuilder.substring(0, stringBuilder.length()-1);
            }

我知道它有点难以理解,但要花一些时间并尝试理解。如果您有任何疑问,请告诉我。我来这里是为了帮助您......