当前位置: 代码迷 >> Android >> Android ViewList代码兑现展现(不使用任何资源文件)
  详细解决方案

Android ViewList代码兑现展现(不使用任何资源文件)

热度:60   发布时间:2016-05-01 16:07:16.0
Android ViewList代码实现展现(不使用任何资源文件)

???? 上一章,我实验了关于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,但是从读取根目录来看,是完全正常的。

  相关解决方案