您的位置:首页 > 其它

设置ListView默认选中第一项

2016-10-20 14:07 316 查看
项目中遇到这样的一个需求,打开一个poupuWindow,里面是一个ListView列表,需求默认选中第一项,查了网上的很多方法都是listView.setItemChecked(0,true);然并卵,发现没什么效果。最终发现,正确的姿势是这样的!在adapter里添加一个方法:

public void setDefSelect(int position) {
this.defItem = position;
notifyDataSetChanged();
}


然后代码中调用:

adapter.setDefSelect(0);//设置默认选中第一项


完整Demo代码如下:

package com.example.listviewdefitem;

import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
private ListView listview;
private PersonAdapter adapter;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.list_view_parent);
adapter = new PersonAdapter(this, getPersons());
listview.setAdapter(adapter);
adapter.setDefSelect(0);//设置默认选中第一项
//ListView项的点击事件
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
adapter.setDefSelect(position);
Person p = (Person) listview.getItemAtPosition(position);
Toast.makeText(MainActivity.this, p.toString(), Toast.LENGTH_SHORT).show();
}
});
}

public List<Person> getPersons() {
List<Person> persons = new ArrayList<Person>();
Person p1 = new Person();
p1.setName("张三");
p1.setSex("20");
Person p2 = new Person();
p2.setName("李四");
p2.setSex("21");
Person p3 = new Person();
p3.setName("王五");
p3.setSex("22");
Person p4 = new Person();
p4.setName("招六");
p4.setSex("23");
Person p5 = new Person();
p5.setName("李四");
p5.setSex("24");
persons.add(p1);
persons.add(p2);
persons.add(p3);
persons.add(p4);
persons.add(p5);

return persons;
}

class PersonAdapter extends BaseAdapter {

private Context context;
private List<Person> persons;
private ViewHolder holder;
private int defItem;//声明默认选中的项

public PersonAdapter(Context context, List<Person> persons) {
super();
this.context = context;
this.persons = persons;
}

@Override
public int getCount() {
return persons.size();
}

@Override
public Object getItem(int position) {
return persons.get(position);
}

@Override
public long getItemId(int position) {
return position;
}
/**
适配器中添加这个方法
*/
public void setDefSelect(int position) { this.defItem = position; notifyDataSetChanged(); }

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.list_parent_item, null);
holder = new ViewHolder();
holder.item1 = (TextView) convertView.findViewById(R.id.item1);
holder.item2 = (TextView) convertView.findViewById(R.id.item2);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (defItem == position) {
convertView.setBackgroundResource(R.drawable.selector_package_list_n);
} else {
convertView.setBackgroundResource(android.R.color.transparent);
}
//绑定数据
Person person = persons.get(position);
holder.item1.setText(person.getName());
holder.item2.setText(person.getSex());
return convertView;
}

class ViewHolder {
TextView item1, item2;
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: