android通过json生成视图
为什么80%的码农都做不了架构师?>>>
比如,有这么个需求,要求从服务器上返回的数据来动态生产视图,来看
activity_main.xml<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:focusable="true"android:focusableInTouchMode="true"tools:context=".MainActivity" ><LinearLayoutandroid:id="@+id/autorunlayout"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical" /></RelativeLayout>
public class MainActivity extends Activity {private List<AutoRun> list;private AutoRun autoRun;private LinearLayout autorunlayout;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);autorunlayout = (LinearLayout) findViewById(R.id.autorunlayout);list = new ArrayList<AutoRun>();autoRun = new AutoRun();dataProvieder();GetView();}/**** @desc 用来模拟服务器得到的数据**/private List<AutoRun> dataProvieder() {String str = "["+ "{\"category\":0,\"label\":\"姓名\",\"minValue\":\"0\",\"maxValue\":\"0\",\"defaultValue\":\"0\",\"listValue\":[]},"+ "{\"category\":0,\"label\":\"年龄\",\"minValue\":\"4\",\"maxValue\":\"120\",\"defaultValue\":\"20\",\"listValue\":[]},"+ "{\"category\":1,\"label\":\"城市\",\"minValue\":\"0\",\"maxValue\":\"0\",\"defaultValue\":\"2\",\"listValue\":[\"北京\",\"上海\",\"广东\",\"深圳\",\"江西\"]},"+ "{\"category\":1,\"label\":\"职业\",\"minValue\":\"0\",\"maxValue\":\"0\",\"defaultValue\":\"0\",\"listValue\":[\"IT\",\"教育贸易\",\"贸易\",\"金融\",\"政府\"]}"+ "]";Gson gson = new Gson(); //Google提供的对象和Json互转的jar包list = gson.fromJson(str, new TypeToken<List<AutoRun>>() {}.getType());return list;}private void GetView() {for (int i = 0; i < list.size(); i++) {if (list.get(i).category == 0) {autorunlayout.addView(GetEditLayout(list.get(i).label,list.get(i).defaultValue));} else if (list.get(i).category == 1) {autorunlayout.addView(GetSpinnerLayout(list.get(i).label,list.get(i).listValue, list.get(i).defaultValue));}}}private View GetEditLayout(String txt, String hint) {LayoutInflater inflater = getLayoutInflater().from(this);View view = inflater.inflate(R.layout.autorun_edittext, null);((TextView) view.findViewById(R.id.label)).setText(txt);((EditText) view.findViewById(R.id.edit)).setHint(hint);return view;}private View GetSpinnerLayout(String txt, List<String> value,String defaulValue) {LayoutInflater inflater = getLayoutInflater().from(this);View view = inflater.inflate(R.layout.autorun_spnnier, null);((TextView) view.findViewById(R.id.label)).setText(txt);ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1, value);Spinner spinner = (Spinner) view.findViewById(R.id.spinner);spinner.setAdapter(adapter);spinner.setSelection(Integer.parseInt(defaulValue));return view;}
}
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="50.0dp"android:gravity="center_vertical"android:orientation="horizontal" ><TextViewandroid:id="@+id/label"android:layout_width="80.0dp"android:layout_height="wrap_content"android:gravity="center"android:text="test" /><EditTextandroid:id="@+id/edit"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginRight="10.0dp" /></LinearLayout>
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="50.0dp"android:gravity="center_vertical"android:orientation="horizontal" ><TextViewandroid:id="@+id/label"android:layout_width="80.0dp"android:layout_height="wrap_content"android:gravity="center"android:text="test" /><Spinnerandroid:id="@+id/spinner"android:layout_width="match_parent"android:layout_height="50.0dp"android:layout_marginRight="10.0dp" /></LinearLayout>
运行效果:
注:
获得 LayoutInflater 实例的三种方式
1.LayoutInflater inflater = getLayoutInflater(); //调用Activity的getLayoutInflater()2.LayoutInflater localinflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);3. LayoutInflater inflater = LayoutInflater.from(context);
这三种方式最终本质是都是调用的Context.getSystemService()
我的博客其它文章列表
http://my.oschina.net/helu
转载于:https://my.oschina.net/helu/blog/141738
android通过json生成视图相关推荐
- Android Json生成及解析实例
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...
- android解析json异常处理,Android的JSON异常而解析
我试图分析我的Android应用程序中的JSON(进一步我将填补与内容列表视图),所以我做了这个类:Android的JSON异常而解析 public class MainActivity extend ...
- Android Studio打包生成APK
Android Studio打包生成APK 当我们编写好代码,测试号应用后,需要在真机环境下测试,这个时候要生成apk,具体步骤如下: 如图,点击Build > Generate Signed ...
- android 读取json数据(遍历JSONObject和JSONArray)
android 读取json数据(遍历JSONObject和JSONArray) public String getJson(){ String jsonString = "{\" ...
- android判断是否json格式,Android判断json格式将错误信息提交给服务器
开发中发现, 服务器偶尔会发送错误格式 json 给 Android 客户端, 导致 Android 客户端 json解析失败, 应用异常. 并非服务器有意坑客户端, 而是客户端请求服务器数据时, 除 ...
- android studio 混淆jar,android studio如何生成混淆代码的jar
释放双眼,带上耳机,听听看~! 今天,简单讲讲android里如何在生成jar包时,同时对jar包的代码进行混淆,避免别人看到核心代码. 之前,我对领导说我打包生成的SDK,别人使用android s ...
- java编写自动化脚本生成apk_Unity3D研究院之Android全自动打包生成apk(六十九)
Unity自动打包Android其实要比IOS容易得多,因为Android不用先生成java工程,然后在构建.apk包,我先说说Android打包的步骤. 1.把sdk拷贝至Plugins/Andro ...
- android studio如何生成混淆代码的jar
今天,简单讲讲android里如何在生成jar包时,同时对jar包的代码进行混淆,避免别人看到核心代码. 之前,我对领导说我打包生成的SDK,别人使用android studio导入后可以看所有的源码 ...
- android studio设置生成的release版本apk的名称
今天,简单讲讲如何使用android studio设置生成apk的名称. 一.首先讲讲如何使用android studio生成release版本的apk. 1.1.前提 发布release 版本,首先 ...
最新文章
- jetbrains intellij IDEA 常用插件和配置
- AWS — AWS CloudFormation
- jinja2的url_for 和数据块
- Codeforces Round #311 (Div. 2) A. Ilya and Diplomas 水题
- node服务的监控预警系统架构
- ant-design-vue 快速入手及常用标签
- 微软源代码遭 SolarWinds 黑客访问
- echarts 加载优化_【第1615期】React Native 图表性能优化实践
- 一键清除失效/删除微博转发微博收藏爬虫
- html5播放器 php,PHP/HTML5页面上的随机声音播放器
- 电商项目需求分析---七月实习总结
- 清除html页打印的页眉,删除html中的页眉和页脚以打印页面
- 开发外贸客户邮箱,怎么精准开发外贸客户邮箱?
- CAD图纸比例设置不同时CAD标注样式设置为相同的操作教程
- java Map的基本用法
- python:keyword --- 检验Python关键字
- 【MM32F5270开发板试用】播放TF卡WAV格式音乐,I2S驱动CS4344
- Microsoft .NET PetShop 4.0 架构与技术分析(七)
- 【构造】Colored Rooks
- UE4 Pixel Streaming像素推流云端部署方案
热门文章
- 软件库网站源码+附手机版
- 白银TD盈亏计算实例介绍
- prototype.js教程及prototype中文手册
- 使用 jQuery Mobile 与 HTML5 开发 Web App (十一) —— jQuery Mobile 事件详解
- Shell编程中的“局部变量”和“导出变量” (export 用法)
- ubuntu动态截图(GIF动画)
- Magento 自定义URL 地址重写
- Python爬取小说
- 最短路径——Floyd算法及优化(蓝桥杯试题集)
- vagrant 报unknown filesystem type 'vboxsf' 解决方案