我正在编写一段代码,每当点击它时都会显示一个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选项。
请问各位帮我找到解决方案吗?
真的很感激,
提前谢谢
答案 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);
}
我知道它有点难以理解,但要花一些时间并尝试理解。如果您有任何疑问,请告诉我。我来这里是为了帮助您......