我需要用複選框實現listview。 如果我選中10箇中的4個複選框,點擊一個按鈕後,無論選中哪個複選框,都必須查找那些行(對象)的詳細信息。 我搜索了很多,但我無法找到monodroid解決方案。 請幫幫我。ListView與複選框使用monodroid?
1
A
回答
0
你應該使用這種類型的適配器使用複選框ListView中:這裏getView方法BaseAdapter:
ViewHolder viewHolder = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
convertView = inflator.inflate(R.layout.row, null);
viewHolder = new ViewHolder();
viewHolder.text = (TextView) convertView.findViewById(R.id.label);
viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.check);
viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int getPosition = (Integer) buttonView.getTag(); // Here we get the position that we have set for the checkbox using setTag.
list.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state.
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.label, viewHolder.text);
convertView.setTag(R.id.check, viewHolder.checkbox);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.checkbox.setTag(position); // This line is important.
viewHolder.text.setText(list.get(position).getName());
viewHolder.checkbox.setChecked(list.get(position).isSelected());
0
因此,不幸的解決您的問題涉及很多細節。我自己也在努力。沒有示例項目,但我試圖從工作解決方案中去除不必要的部分。希望這至少有助於概述我創建的結構。
適配器
public class MyItemListAdapter : BaseAdapter
{
private OrderedDictionary<Guid, ObjectRespresentingSingleRow> _items = new OrderedDictionary<Guid, ObjectRespresentingSingleRow>();
private GuidHashSet _selectedItems = new GuidHashSet();
public ICollection<ObjectRespresentingSingleRow> Items
{
get { return _itmes.Values; }
}
public event EventHandler<IntegerEventArgs> SelectedItemsChanged;
public event EventHandler<IntegerEventArgs> ItemsNumberChanged;
public void Add(ObjectRespresentingSingleRow item)
{
_items.Add(item.Id, item);
// Fire the ItemsNumberChanged event here
NotifyDataSetChanged();
}
public void SelectAll()
{
_selectedItems.UnionWith(_items.Keys);
// Fire SelectedEventsChanged here
NotifyDataSetChanged();
}
public void ClearSelected()
{
_selectedItems.Clear();
// Fire SelectedEventsChanged here
NotifyDataSetChanged();
}
// Will need to add all the overrides as well as some methods like (RemoveAllSelected(), SelectAt(), Clear(), ... etc)
public override View GetView(int position, View convertView, ViewGroup parent)
{
ItemViewHolder viewHolder;
ObjectRespresentingSingleRow listItem = _items[position].Value;
if (convertView == null)
{
viewHolder = new ItemViewHolder();
convertView = _inflater.Inflate(Resource.Layout.LayoutItemListViewRow, null);
viewHolder.CheckBox = convertView.FindViewById<CheckBox>(Resource.Id.ItemListViewRowCheckBoxSelected);
viewHolder.OtherView = convertView.FindViewById<TextView>(Resource.Id.ItemListViewRowTextViewName);
// I also had to use a TouchDelegate on the CheckBox to extend the checkbox touchable area
// Save the view holder so that we do not have to find these view again for this particular item
convertView.Tag = viewHolder;
}
else
{
// Use the previous view holder (performance)
viewHolder = (ItemViewHolder)convertView.Tag;
}
// Since the views are reusable we need to rotate the click handlers for the views
viewHolder.CheckBox.Click -= viewHolder.ClickHandler;
viewHolder.ClickHandler = (object sender, EventArgs args) =>
{
CheckBox checkBox = (CheckBox)sender;
if (checkBox.Checked)
{
_selectedItems.Add(listItem.Id);
}
else
{
_selectedItems.Remove(listItem.Id);
}
// Fire SelectedItemsChanged event here with the current number of selected items
};
viewHolder.CheckBox.Click += viewHolder.ClickHandler;
// Popolate the view based on the event data
viewHolder.OtherView.Text = listItem.Text;
viewHolder.CheckBox.Checked = _selectedItems.Contains(listItem.Id);
// Populate the rest of the view ... etc
return convertView;
}
}
活動/片段顯示的列表
private MyItemListAdapter _itemListAdapter = null;
private ItemListActionCallback _actionCallback = null;
private void OnCreate()
{
_itemListAdapter = new MyItemListAdapter(Activity);
_itemListAdapter.ItemsNumberChanged += OnItemsNumberChanged;
_itemListAdapter.SelectedItemsChanged += OnSelectedItemsChanged;
mainListView.ItemClick += OnItemsClicked; // Navigate to the item as well when area away from checkbox is touched
mainListView.Adapter = _itemListAdapter;
}
private void OnItemsNumberChanged(object sender, IntegerEventArgs args)
{
// Display empty if args.Value == 0 or something like it
}
private void OnSelectedItemsChanged(object sender, IntegerEventArgs args)
{
if (args.Value == 0)
{
if (_actionMode != null)
{
// The last selected event was unselected, therefore exit action mode
_actionMode.Finish();
}
}
else
{
if (_actionMode == null)
{
// At least one event was selected, start action mode
_actionMode = Activity.StartActionMode(_actionCallback);
}
// Update the action bar with the total number of selected events
_actionMode.Title = args.Value; // Format this
}
}
如果你想要做的事,以通過操作欄選擇的對象,你將不得不實現這個作爲好。
public class ItemListActionCallback : Java.Lang.Object, ActionMode.ICallback
{
private readonly MyItemListAdapter _adapter = null;
public bool OnActionItemClicked(ActionMode mode, IMenuItem item)
{
switch (item.ItemId)
{
case Resource.Id.MenuDelete:
// Delete from local storage as well as from the adapater
_adapter.RemoveSelected();
_adapter.NotifyDataSetChanged();
mode.Finish();
break;
case Resource.Id.MenuSelectAll:
_adapter.SelectAll();
break;
default:
mode.Finish();
break;
}
return true;
}
// See other examples on how to implement the rest
}
另外,請確保您的複選框有以下幾點:
android:focusable="false"
這基本上模仿的Gmail做什麼。
相關問題
- 1. MonoDroid AlertDialg與ListView
- 2. Windows ListView與複選框
- 3. 的ListView與複選框/ checkedtextview
- 4. 如何修復ListView與複選框?
- 5. MonoDroid ListView選擇問題
- 6. Listview複選框 - vb.net
- 7. 複選框android listview
- 8. 如何使用listview和複選框?
- 9. listview與複選框單聲道爲Android
- 10. 安卓ListView與獨立複選框
- 11. 如何將複選框與ListView(Android)
- 12. ListView與複選框滾動問題
- 13. listview複選框選擇vb.net
- 14. Listview複選框選擇
- 15. ListView ItemClick MonoDroid
- 16. 使用ActionBarSherlock與monodroid
- 17. ListView複選框簽發後
- 18. ListView上的複選框android
- 19. ListView中失去複選框
- 20. 結合ListView和複選框
- 21. 複選框+ customAdapter + listview + sharedpreferences
- 22. 帶複選框的WPF ListView
- 23. android ListView with複選框
- 24. 帶有複選框的ListView
- 25. Listview with multiple select複選框
- 26. ListView複選框行爲
- 27. ListView selecioint所有複選框
- 28. listview組成的複選框
- 29. ListView中的複選框
- 30. listview item as複選框
我無法用C#語言實現。 – KiShOrE
這是完整的java –