当我的活动开始时,我最初用项目加载我的ListView
时,我希望能够设置其中的一些项进行检查,但这似乎不起作用。
我使用的是simple_list_item_multiple_choice
布局,所以项目是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;
}
}
这是可以关闭和重新打开的活动,但是需要从它停止的地方恢复(一些项目检查了,有些项目没有)。这就是为什么事物存储在全局静态变量中的原因。
如果全局列表为空,请手动更新列表。否则,从全局列表加载。它成功地从全局列表加载,并成功地存储该列表的选中属性,并在item 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>
发布于 2014-11-19 11:20:29
以编程方式选择项 手动设置哪些项是“选定的”是使用SetItemChecked方法完成的(对于多个选择,可以多次调用它)
请注意,SetItemChecked位于ListView上。
您可以删除GetView中设置选中的代码。
然后,对于最初应该检查的每一项(或在调用FillList期间),调用: ListView.SetItemChecked (position,true);
https://stackoverflow.com/questions/27022088
复制相似问题