今天群里有人求助说不用xml布局文件做ListView展示,这需求也是奇怪。。花了点时间帮他写了下,不多说看代码吧。
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List bookList = new ArrayList<>();
bookList.add(new Book("Android群英传", "徐医生"));
bookList.add(new Book("深入理解Java虚拟机", "周志明"));
ListView lv = new ListView(this);
//第二个参数用不到,直接0好了
lv.setAdapter(new BookAdapter(this, 0, bookList));
setContentView(lv);
}
BookAdapter.java
public class BookAdapter extends ArrayAdapter {
public BookAdapter(Context context, int resItemView, List bookList) {
super(context, resItemView, bookList);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final Book book = getItem(position);
View view;
final ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
//主要是这里手动代码创建布局
view = new LinearLayout(getContext());
viewHolder.nameTv = new TextView(getContext());
viewHolder.authorTv = new TextView(getContext());
((ViewGroup)view).addView(viewHolder.nameTv);
((ViewGroup)view).addView(viewHolder.authorTv);
view.setTag(viewHolder);
} else {
view = convertView;
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.nameTv.setText(book.getName());
viewHolder.authorTv.setText(book.getAuthor());
return view;
}
}
class ViewHolder {
public TextView nameTv;
public TextView authorTv;
}