目前,我参与了与在线foodItem订购相关的Android应用程序开发。我有一个listView,其中包含以下架构:
itemName1 itemPrice1 checkBox
itemName2 itemPrice2 checkBox
itemName3 itemPrice3 checkBox
.
.
.
GetYourCart[Button]
我的任务是在用户按下按钮时跟踪每个选定的itemNames的价格和总价。我使用了SparseBooleanArray sbArray = myMenulist.getCheckedItemPositions();
,但没有显示任何结果。
我该如何实现?我已经阅读了stackoverflow和其他在线教程中提出的几个问题,但无法得到它。
已编辑:以下是我用于检查结果的所选项目的代码:
btnyourCart.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
String selected = "";
int cntChoice = myMenulist.getCount();
SparseBooleanArray sbArray = myMenulist.getCheckedItemPositions();
for(int i=0;i<cntChoice;i++){
if(sbArray.get(i)) {
selected += myMenulist.getItemAtPosition(i).toString() + "\n";
}
}
Log.e("menu","Items "+selected);
Toast.makeText(getApplicationContext(), selected, Toast.LENGTH_SHORT).show();
}
});
提前致谢!
答案 0 :(得分:1)
int total=0;
btnyourCart.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
String selected = "";
int cntChoice = myMenulist.getCount();
SparseBooleanArray sbArray = myMenulist.getCheckedItemPositions();
for(int i=0;i<cntChoice;i++){
if(sbArray.get(i)) {
selected += myMenulist.getItemAtPosition(i).toString() + "\n";
total+=myMenulist.get(i).price;
}
}
Log.e("menu","Items "+selected);
Toast.makeText(getApplicationContext(), selected, Toast.LENGTH_SHORT).show();
}
});
现在点击按钮点击事件获得总计。
button.setOnClickListenernew View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(
this,
""+total,
Toast.LENGTH_LONG).show();
}
});
答案 1 :(得分:0)
您需要在getView()方法中使用自定义适配器来将复选框值保留在列表位置并将该值存储在数组中。这将使复选框值与其位置保持一致。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if(convertView == null){
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.list_layout, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.checkBox = (CheckBox) view.findViewById(R.id.del_many_task_chk);
viewHolder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Model element = (Model) viewHolder.checkBox.getTag();
element.isChecked = buttonView.isChecked();
}
});
view.setTag(viewHolder);
viewHolder.checkBox.setTag(list.get(position));
}else{
view = convertView;
((ViewHolder)view.getTag()).checkBox.setTag(list.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.checkBox.setChecked(list.get(position).isChecked);
return view;
}
现在,当需要知道选中哪个复选框时,您需要使用迭代器浏览列表项。根据复选框值获取已选中和未选中的项目。
for(int i=0;i<list.size();i++){
if(all_task_list.get(i).isChecked){
// to do things for checked item
}else{
// to do things for uncheck item
}
}