2014-11-19 2 views
0

Когда начинается моя работа, и я изначально загружаю свои ListView с элементами, я хочу, чтобы некоторые из этих элементов были проверены, однако, похоже, что они не работают.Загрузка CheckedTextView элементов в ListView с установленными состояниями состояний

Я пользуюсь simple_list_item_multiple_choicelayout, поэтому артикулы 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> 
+0

'.. закрыт и снова открыт, но ему необходимо возобновить работу с того места, где он был остановлен (некоторые элементы отмечены, некоторые предметы нет). Вот почему вещи хранятся в глобальной статической переменной. '. Вы можете хранить значения в глобальной переменной. Но вы не можете использовать их при перезагрузке вашего приложения, так как все изменения исчезнут. Чтобы сохранить состояние, вам нужен файл или используйте общие настройки. – greenapps

+0

'var checkedTextView = view.FindViewById (Andro ...'. FindViewById <>? Var? – greenapps

+0

Работает служба, поэтому сохранение данных не является проблемой для закрытия и повторного открытия операции. над кодом, проверьте теги. Этот код является просто C# для 'CheckedTextView checkedTextView = (CheckedTextView) view.findViewById (R.id.name);' –

ответ

2

Выбор элементов Программного

настройки вручную, какие элементы 'выбраны' осуществляются с SetItemChecked метода (его можно назвать несколько раз для нескольких )

Customizing A List View's Appearance

Обратите внимание, что SetItemChecked находится на ListView.

Вы можете удалить код в GetView, который устанавливает Checked.

Затем, после (или во время вызова FillList) для каждого элемента, который должен быть первоначально установлен, звоните: ListView.SetItemChecked (позиция, истина);

+0

Это работает, спасибо! –

+1

Вы также можете переопределить: protected override void OnListItemClick (ListView l, View v, int position, long id) –

+1

, а затем избавиться от: ListView.ItemClick + = ListView_ItemClick; и ListView_ItemClick. –

Смежные вопросы