Android ViewList代码实现展现(不使用任何资源文件)
上一章,我实验了关于UI的基本效果,虽然还有很多控件需要二次开发和实验,不过至少说明是可以使用的。有些空间用代码生成确实十分的麻烦。比如,我花了一个晚上才研究明白,ViewList怎么能够用纯代码显示页面。 首先,我们需要声明ListView控件,设置布局和数据源ListView lv = new ListView(context);...
上一章,我实验了关于UI的基本效果,虽然还有很多控件需要二次开发和实验,不过至少说明是可以使用的。有些空间用代码生成确实十分的麻烦。比如,我花了一个晚上才研究明白,ViewList怎么能够用纯代码显示页面。
首先,我们需要声明ListView控件,设置布局和数据源
ListView lv = new ListView(context);
lv.setId(12347);
lv.setDrawSelectorOnTop(false);
lv.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 200));
lv.setBackgroundColor(Color.BLACK);
File f = new File("/");
File[] files = f.listFiles();
ArrayList<HashMap<String, String>> fileInfos = new ArrayList<HashMap<String, String>>();
for (File file : files) {
HashMap<String, String> fileInfo = new HashMap<String, String>();
fileInfo.put("FILE_NAME", file.getName());
fileInfos.add(fileInfo);
}
MyAdapter adapter = new MyAdapter(context, fileInfos,// 数据来源
new String[] { "FILE_NAME" });
lv.setAdapter(adapter);
layout.addView(lv);
需要注意的是LayoutParams和MyAdapter 两个地方
LayoutParams:当用eclipse开发自动生成时,你会发现,有好多同名类,一定要选择正确的,这里需要选择的是:android.widget.LinearLayout,因为ListView 所属容器是LinearLayout类型。
MyAdapter:则是一处需要自行开发的了,虽然Android库中带了好多已实现的Adapter,但是我测试的好多,实现方式都是从资源文件中读取布局信息,这样让之前的努力都白费了,随意这是,只好自己实现了。
由于是测试,方法并没有全部正常的实现,也没有异常处理,仅作为示例使用:
public class MyAdapter extends BaseAdapter {
Context context;
ArrayList<HashMap<String, String>> data;
String[] from;
public MyAdapter(Context context, ArrayList<HashMap<String, String>> data, String[] from) {
this.context = context;
this.data = data;
this.from = from;
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return data.get(position);
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
TableLayout lay = null;
if (null == convertView) {
TableRow tr = new TableRow(context);
TextView tv_l = new TextView(context);
TextView tv_l2 = new TextView(context);
tv_l.setText("* ");
tv_l2.setText(data.get(position).get(from[0]));
tv_l2.setGravity(Gravity.LEFT);
tv_l2.setLayoutParams(new TableRow.LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
tr.addView(tv_l);
tr.addView(tv_l2, new TableRow.LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
lay = new TableLayout(context);
lay.addView(tr);
} else {
lay = (TableLayout) convertView;
}
lay.setColumnStretchable(1, true);
return lay;
}
}
这里自动构建了每一行是一个TableLayout,并包含一个TableRow,TableRow 中才是需要显示的内容,这样可以方便以后的各种布局。
展现效果:
另外提一点的是:Android由于实现了一部分JAVA类库,所以文件访问和Java程序是基本类似的,虽然还没有测试细节的API,但是从读取根目录来看,是完全正常的。
更多推荐
所有评论(0)