Когда начинается моя работа, и я изначально загружаю свои ListView
с элементами, я хочу, чтобы некоторые из этих элементов были проверены, однако, похоже, что они не работают.Загрузка CheckedTextView элементов в ListView с установленными состояниями состояний
Я пользуюсь simple_list_item_multiple_choice
layout, поэтому артикулы CheckedTextView
.
Вот адаптер. Текст отображается правильно, однако свойство Checked
, похоже, ничего не делает визуально, несмотря на то, что оно установлено в true/false.
public class VehicleSubListAdapter : BaseAdapter<string>
{
// ...
public override View GetView(int position, View convertView, ViewGroup parent)
{
View view = convertView ?? _context.LayoutInflater.Inflate(Android.Resource.Layout.SimpleListItemMultipleChoice, parent, false);
var checkedTextView = view.FindViewById<CheckedTextView>(Android.Resource.Id.Text1);
checkedTextView.Text = _items[position].Name;
// This doesn't seem to do anything
checkedTextView.Checked = _items[position].Checked;
// I've even tried this with no change visually
//checkedTextView.Checked = true;
return view;
}
}
Вот активность, которая может быть закрыта и вновь открыт, но необходимо возобновить с места остановки (некоторые пункты проверены, некоторые элементы не). Вот почему вещи хранятся в глобальной статической переменной.
Если глобальный список пуст, вручную обновите списки. Осталось загрузить из глобального списка. Он успешно загружается из глобального списка и успешно сохраняет свойство Checked этого списка, измененное в событии click элемента. Однако проверенные элементы не отображаются, если они проверяются при загрузке активности.
Также я пробовал позвонить FillList()
как в OnCreate
, так и в OnResume
и ни один из них не работал.
public class VehicleConditionSubActivity : ListActivity
{
private List<VehicleConditionItemDTO> _items;
private VehicleSubListAdapter _vehicleAdapter;
//...
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetTheme(Resource.Style.MyAppTheme);
SetContentView(Resource.Layout.VehicleConditionItem);
// Set up action bar
ActionBar.SetDisplayHomeAsUpEnabled(true);
// Set up list view
ListView.ChoiceMode = ChoiceMode.Multiple;
_items = new List<VehicleConditionItemDTO>();
_vehicleAdapter = new VehicleSubListAdapter(this, _items);
ListAdapter = _vehicleAdapter;
ListView.ItemClick += ListView_ItemClick;
//...
// Fill list view
FillList();
}
private void FillList()
{
AddFluidItems();
_vehicleAdapter.NotifyDataSetChanged();
}
private void AddFluidItems()
{
// I've checked that this is being called correctly
if (Global.Conditions.FluidLevels.Count > 0)
{
foreach (var item in Global.Conditions.FluidLevels)
{
_items.Add(item);
}
}
else
{
_items.Add(new VehicleConditionItemDTO("1", "Engine oil"));
// ...
foreach (var item in _items)
{
Global.Conditions.FluidLevels.Add(item);
}
}
}
// ...
private void ListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
// Items already check/uncheck properly when tapped
// So I just update the global list items checked property
Global.Conditions.FluidLevels[e.Position].Checked = !Global.Conditions.FluidLevels[e.Position].Checked;
}
}
Схема для деятельности
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="25px"
android:minHeight="25px"
android:background="@color/background">
<ListView
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@android:id/list" />
</LinearLayout>
'.. закрыт и снова открыт, но ему необходимо возобновить работу с того места, где он был остановлен (некоторые элементы отмечены, некоторые предметы нет). Вот почему вещи хранятся в глобальной статической переменной. '. Вы можете хранить значения в глобальной переменной. Но вы не можете использовать их при перезагрузке вашего приложения, так как все изменения исчезнут. Чтобы сохранить состояние, вам нужен файл или используйте общие настройки. – greenapps
'var checkedTextView = view.FindViewById (Andro ...'. FindViewById <>? Var? –
greenapps
Работает служба, поэтому сохранение данных не является проблемой для закрытия и повторного открытия операции. над кодом, проверьте теги. Этот код является просто C# для 'CheckedTextView checkedTextView = (CheckedTextView) view.findViewById (R.id.name);' –