当我的活动开始并且我最初加载带有项目的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属性。但是,当活动加载时,选中的项目不会显示为已选中。
此外,我已尝试在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 :(得分:2)
以编程方式选择项目
手动设置“已选择”的项目是使用 SetItemChecked 方法(可以多次调用它 选择)
Customizing A List View's Appearance
请注意,SetItemChecked位于ListView。
您可以删除GetView中设置Checked的代码。
然后,在应该最初检查的每个项目之后(或在调用FillList期间),调用: ListView.SetItemChecked(position,true);