Je dois implémenter listview avec les cases à cocher. Si je coche 4 cases sur 10, après avoir cliqué sur un bouton, alors quelles que soient les cases à cocher cochées, il faut trouver ces détails de ligne (objet). J'ai beaucoup cherché mais je ne pouvais pas trouver de solution en monodroid. S'il vous plaît aidez-moi.Listview avec case à cocher en utilisant monodroid?
1
A
Répondre
0
vous devez utiliser ce type d'adaptateur ETUI ARRIVÉE LISTVIEW: Méthode VOICI getView pour 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
Donc résoudre votre problème, malheureusement, implique beaucoup de détails. J'ai lutté avec moi-même. Je n'ai pas de projet d'exemple, mais j'ai essayé de retirer des parties inutiles d'une solution de travail. J'espère que cela aidera au moins la vue d'ensemble de la structure que j'ai créée.
Adaptateur
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;
}
}
Activité/Fragment qui affiche la liste
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
}
}
Si vous voulez faire quelque chose pour les objets sélectionnés via la barre d'action, vous devrez mettre en œuvre ce que bien.
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
}
Assurez-vous également que votre CheckBox a les éléments suivants:
android:focusable="false"
Cela imite essentiellement ce que fait Gmail.
Questions connexes
- 1. Android ListView avec une case à cocher
- 2. ListView avec la case à cocher
- 3. Android listview avec case à cocher
- 4. listview, case à cocher, C#
- 5. Cochez une case à cocher dans ListView
- 6. ASP Listview - case à cocher event findcontrol
- 7. ListView avec case à cocher - pourquoi la case à cocher ne s'affiche pas?
- 8. Case à cocher dans le contrôle listview
- 9. modifier case à cocher en utilisant javascript
- 10. problème avec case à cocher
- 11. case à cocher propriété en utilisant jquery
- 12. jQuery mobile, Listview avec une case à cocher
- 13. Comment cocher la seule case à cocher dans le ListView
- 14. Listview personnalisé avec case à cocher, seekbar et textview
- 15. ListView groupé avec case à cocher dans l'en-tête
- 16. Listview avec plus d'une case à cocher par ligne?
- 17. IndexOutOfBoundsException dans une ListView avec case à cocher
- 18. Listview avec plusieurs case à cocher et image Voir?
- 19. listview avec case à cocher mono pour android
- 20. en sélectionnant plusieurs contacts en utilisant la case à cocher
- 21. En Listview perdre l'état de case à cocher
- 22. Comment travailler avec deux case à cocher en utilisant jQuery
- 23. Recherche PHP en utilisant AJAX avec la case à cocher
- 24. Afficher/Masquer avec la case à cocher en utilisant jQuery
- 25. listview avec case
- 26. case à cocher case à cocher
- 27. Ajouter une case à cocher à l'élément listview
- 28. sélection avec cases à cocher listview
- 29. kendo listView avec case à cocher avec tout sélectionner l'option case
- 30. ListView impossible de cocher une case
Je ne peux pas mettre en œuvre en langage C#. – KiShOrE
c'est en Java complet –