There is a ListView in my App and the ListView has a selector. I want to make the first item of this ListView to be selected as default at the very
You can fix it like this.
//set list adapter, then
lv.setItemChecked(1, true);//position 1
lv.setSelection(1);//position 1
Update XML layout with single choice.
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/list_item_background"
android:cacheColorHint="#FFFFFF"
android:choiceMode="singleChoice"
android:dividerHeight="1dip" >
</ListView>
and set listview background XML as list_item_background.xml,
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bg_list_default" android:state_activated="false"/>
<item android:drawable="@drawable/bg_list_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/bg_list_pressed" android:state_activated="true"/>
I have used data binding to solve this,
using the following codebehind:
private List<Unit> _units;
private Unit _selectedUnit;
public Unit selectedUnit{
get{
if (_selectedUnit is null){
return _units.Count > 0 ? _units[0] : null;
}else{
return _selectedUnit;
}
}
set{
if (_selectedUnit != value){
_selectedUnit = value;
OnPropertyChanged("selectedUnit");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName){
var changed = PropertyChanged;
if (changed != null){
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
and XAML
<ListView ItemsSource="{Binding units}"
SelectedItem="{Binding selectedUnit, Mode=TwoWay}">
Below solution works for me:
Setting background/View Id on get View & using the setOnItemClickListener of the List View
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)
ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.listitems, null);
}
ListItem m = items.get(position);
if (m != null) {
TextView txt = (TextView)v.findViewById(R.id.textView);
txt.setText(m.Item);
}
// set selected item
LinearLayout ActiveItem = (LinearLayout) v;
v.setId(position);
if (position == GetDeviceDetails.selectedsize)
{
ActiveItem.setBackgroundColor(0xFF7F8184);
}
return v;
}
In the Activity on Create :
listView1.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> adapter, View v, int position, long id) {
adapter.findViewById(GetDeviceDetails.selectedsize).setBackgroundColor(0xFFFFFFF);
GetDeviceDetails.selectedsize = position;
adapter.findViewById(position).setBackgroundColor(0xFF7F8184);
Log.d("Selected Id", "" + v.getId());
Log.d("find Selected Id", "" + adapter.findViewById(0));
}
});
listView1.setSelection(0);
listView1.setItemChecked(0, true);
//put the below code in get view function
if(position==0)
{
convertView.setSelected(true);
}
This work for me. I hope this will help you. :)
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// do someting...
if(position == 0){
mListView.performItemClick(convertView, 0, 0);
}
}
now i found another good way to implement this.
Secondly,just go ahead as follow,
int defaultPositon = 0;
int justIgnoreId = 0;
mListView.setItemChecked(defaultPositon, true);
mListView.performItemClick(mListView.getSelectedView(), defaultPositon, justIgnoreId);
yourlist.setItemChecked(position,true)