求一个demo,<listview中有一个CheckBox和Textview>  类似于邮件列表的选中删除的操作,一旦删除,列表就要更新,每次选中就会提示当前列表的文字内容?
    
     因为一旦更新,选中的复选框得不到对应的内容呢!~~~~(>_<)~~~~ 
我的代码如下:
     
     public class TestAdapterAndCheckActivity extends Activity
{ // 分组按钮
Button show;
// 列表视窗
ListView lv;
// 字符串
StringBuilder value = null;
// 上下文
Context mContext;
// 适配器
MyListAdapter adapter;
// 下标号集合
List<Integer> listItemID = new ArrayList<Integer>();
// 键值对集合
List<Map<String, Object>> persons = new ArrayList<Map<String, Object>>(); // 内容 从数据库中获取一部分
String[] names = new String[]
{ "刘广建", "张虹", "刘晓勇", "杨凯", "石磊", "邓于民", "何新", "杜威", "陈智敏", "叶迅挺", "陈瑞明",
"王德银", "洪小明", "王海群", "黄剑雄", "付明", "沈贤法", "宋德隆", "马锦辉", "赵东武", "宋超根" };

View view=null; /**
 * 
 */
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mContext = getApplicationContext();
show = (Button) findViewById(R.id.show);
lv = (ListView) findViewById(R.id.lvperson); persons = getList();
adapter = new MyListAdapter(persons);
lv.setAdapter(adapter); show.setOnClickListener(new View.OnClickListener()
{ @Override
public void onClick(View v)
{
listItemID.clear(); for (int i = 0; i < adapter.mChecked.size(); i++)
{
if (adapter.mChecked.get(i))
{
listItemID.add(i);
}
} if (listItemID.size() > 4 || listItemID.size() < 2)
{
AlertDialog.Builder builder1 = new AlertDialog.Builder(
TestAdapterAndCheckActivity.this);
builder1.setTitle("提示");
builder1.setMessage("分组人数最少两个,最多四个!"); builder1.setPositiveButton("确定",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog,
int which)
{
}
}); builder1.create().show();
} else
{
value = new StringBuilder(); for (int i = 0; i < listItemID.size(); i++)
{
value.append(names[listItemID.get(i).intValue()] + " ");
}
AlertDialog.Builder builder2 = new AlertDialog.Builder(
TestAdapterAndCheckActivity.this);
builder2.setTitle("分组");
builder2.setMessage("确定将下列名单分为一组吗?\n" + value.toString()); builder2.setPositiveButton("确定",
new DialogInterface.OnClickListener()
{ @Override
public void onClick(DialogInterface dialog,
int which)
{
//
for (int i = 0; i < listItemID.size(); i++)
{
value.append(names[listItemID.get(i).intValue()] + " ");
}
// for (int i = listItemID.size() - 1; i >= 0; i--)
// {
// persons.remove(listItemID.get(i)
// .intValue());
// adapter.mChecked.remove(listItemID.get(
// i).intValue());
// }
// adapter.notifyDataSetChanged();
// lv.invalidate();
}
}); builder2.setNegativeButton("取消",
new DialogInterface.OnClickListener()
{ @Override
public void onClick(DialogInterface dialog,
int which)
{
}
}); builder2.show();
}
}
});
} /**
 * 获取List实体内容
 */
public List<Map<String, Object>> getList()
{ List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>(); for (int i = 0; i < names.length; i++)
{
Map<String, Object> map = new HashMap<String, Object>(); map.put("name", names[i]); lists.add(map);
} return lists;
} // 自定义ListView适配器
class MyListAdapter extends BaseAdapter
{
List<Boolean> mChecked;
List<Map<String, Object>> listPerson;
HashMap<Integer, View> map = new HashMap<Integer, View>(); public MyListAdapter(List<Map<String, Object>> list)
{
listPerson = new ArrayList<Map<String, Object>>();
listPerson = list; mChecked = new ArrayList<Boolean>();
for (int i = 0; i < list.size(); i++)
{
mChecked.add(false);
}
} @Override
public int getCount()
{
return listPerson.size();
} @Override
public Object getItem(int position)
{
return listPerson.get(position);
} @Override
public long getItemId(int position)
{
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent)
{

ViewHolder holder = null; if (map.get(position) == null)
{ LayoutInflater mInflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = mInflater.inflate(R.layout.listitem, null);
holder = new ViewHolder();
holder.selected = (CheckBox) view
.findViewById(R.id.list_select);
holder.name = (TextView) view.findViewById(R.id.list_name); final int p = position;
map.put(position, view);
holder.selected.setOnClickListener(new View.OnClickListener()
{ @Override
public void onClick(View view)
{
CheckBox cb = (CheckBox) view;
mChecked.set(p, cb.isChecked());
}
});
view.setTag(holder);
} else
{ view = map.get(position);
holder = (ViewHolder) view.getTag();
} holder.selected.setChecked(mChecked.get(position));
holder.name
.setText(listPerson.get(position).get("name").toString());
return view;
} } // 静态的设计模式
static class ViewHolder
{
CheckBox selected;
TextView name;
}
}
     

解决方案 »

  1.   


    很简单的:
           listview中显示的就是一个CheckBox和一个TextView(显示名字),我随便选中其中2-4个进行分为一组,弹出对话框,显示选中项的名字,按下“确定”,以前选中的要立即消失掉,从listview中除去,以此类此操作
      

  2.   

    用multichoice来做,具体的看andoid alertdialog sample code,多得是。
      

  3.   

    没听说过  你有demo么?