方式一:
1、使ViewHolder继承LinearLayout
2、在ViewHolder中findViewById
3、向外暴露一个方法用来赋值
个人觉得:使用这种方式更有利于为item中的某个控件设置点击事件。
public class ListViewAdapter1 extends AppCompatActivity {
private ListView mListView;
private MyAdapter adapter;
private List<String> mList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view_adapter1);
init();
}
private void init() {
initView();
initDatas();
initAdapter();
mListView.setAdapter(adapter);
}
private void initAdapter() {
adapter = new MyAdapter();
}
private void initDatas() {
mList = new ArrayList<>();
for(int i = 0;i<30;i++){
mList.add("数据"+i);
}
}
private void initView() {
mListView = (ListView) findViewById(R.id.listView1);
}
private class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int i) {
return mList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
MyViewHolder holder;
if(view != null){
holder = (MyViewHolder) view;
}else {
holder = new MyViewHolder(ListViewAdapter1.this);
}
holder.setViewContent(i);
return holder;
}
public class MyViewHolder extends LinearLayout{
TextView textView;
public MyViewHolder(Context context) {
super(context);
//一定要写this
View view = View.inflate(ListViewAdapter1.this,R.layout.layout_item,this);
textView = (TextView) view.findViewById(R.id.text);
}
public void setViewContent(int position){
textView.setText(mList.get(position));
}
}
}
}
方式二:
这种方式是最常用的,需要注意的就是设置tag。
public class ListViewAdapter2 extends AppCompatActivity {
private MyAdapter adapter;
private ListView mListView;
private List<String> mList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view_adapter2);
init();
}
private void init() {
initView();
initDatas();
initAdapter();
mListView.setAdapter(adapter);
}
private void initAdapter() {
adapter = new MyAdapter();
}
private void initDatas() {
mList = new ArrayList<>();
for(int i = 0;i<30;i++){
mList.add("数据"+i);
}
}
private void initView() {
mListView = (ListView) findViewById(R.id.listView2);
}
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int i) {
return mList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
MyViewHolder holder;
if(view == null){
holder = new MyViewHolder();
//最好把false加上
view = LayoutInflater.from(ListViewAdapter2.this).inflate(R.layout.layout_item, viewGroup,false);
holder.textView = (TextView) view.findViewById(R.id.text);
view.setTag(holder);
}else {
holder = (MyViewHolder) view.getTag();
}
holder.textView.setText(mList.get(i));
return view;
}
private class MyViewHolder{
TextView textView;
}
}
}
布局就不写啦,嘿嘿,都是ListView,条目的是一个TextView。