在安卓项目01中,搞定了app的名称、图标和启动页,现在是进入到首页MainActivity了;但我是出于学习Android状态,所以我需要有一个项目笔记,而且首页不能搞得像一个正常的项目那样,而是应该是各种测试demo的目录入口。所以,我需要一个项目笔记以及一个有很多跳转的测试首页布局。
本篇主要内容有:
1.在Android工程中添加项目笔记,以便记录项目开发过程中的各种杂事;
2.listView的几种写法;
3.搭建本地服务器及xml解析;
4.去除标题栏title;
5.Intent意图的传值及跳转
1.在Android工程中添加项目笔记
这个笔记的定位是项目笔记,所以我打算添加到项目的根文件夹下,操作步骤为:
1.在Android Studio中将项目路径切换到project目录下(左上角);
2.选中项目根文件夹(项目名称),右键New - File - 输入笔记名称 - 选择"Text"
然后就有一个记事本供记录项目笔记
2.listView的简单介绍
1.搭建listView
//注意:fastScrollEnabled 是实现快速滚动的
2.加载view
ListView lv = (ListView) findViewById(R.id.main_LV);
//加载数据适配器
//第一种:BaseAdapter(复杂cell常用)
lv.setAdapter(new MyListAdapter());//BaseAdapter(复杂cell常用)
//第二种:ArrayAdapter(简单文本cell)
// twoArrayAdapterCell();
//第三种:SimpleAdapter(数据结构简单时使用)
// threeSimpleAdapterCell();
//设置listView的点击事件
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
Log.d(TAG, "onItemClick: 点击了"+ position);
}
});
}
第一种:BaseAdapter(复杂cell常用)
//布局文件:
//第一种数据适配器:BaseAdapter(复杂cell常用)
private class MyListAdapter extends BaseAdapter {
@Override
public int getCount() {//有几条
return listArr.size();
}
@Override
public Object getItem(int position) {//不用管
return null;
}
@Override
public long getItemId(int position) {//不用管
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {//展示cell
View view;
if (convertView == null) {//没有就创建
//创建新的view对象,可以通过打气筒把一个布局资源转换成一个view对象
//获取打气筒的第一种方法:
// view = View.inflate(getApplicationContext(), R.layout.lvcell1, null);
//获取打气筒的第二种方法:
// view = LayoutInflater.from(getApplicationContext()).inflate( R.layout.lvcell1, null);
//获取打气筒的第三种方法:(最常用,最底层)
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.lvcell1, null);
} else {//若有就复用
view = convertView;
}
//获取控件
SmartImageView img = (SmartImageView) view.findViewById(R.id.lvcell1_icon);
TextView title_tv = (TextView) view.findViewById(R.id.lvcell1_title);
TextView msg_tv = (TextView) view.findViewById(R.id.lvcell1_msg);
//赋值
img.setImageUrl(listArr.get(position).getImg(), R.drawable.test_icon);
title_tv.setText(listArr.get(position).getTitle());
msg_tv.setText(listArr.get(position).getDesc());
return view;
}
}
//第二种:ArrayAdapter(简单文本cell)
//布局文件:
//第二种数据适配器:ArrayAdapter(简单文本cell)
private void twoArrayAdapterCell() {
String titleArr[] = {"1", "2", "3", "4", "5", "6"};
ArrayAdapter adapter = new ArrayAdapter(this, R.layout.lvcell2, R.id.lvcell2_title, titleArr);
lv.setAdapter(adapter);
}
第三种:SimpleAdapter(数据结构简单时使用)
//布局文件
//第三种数据适配器:SimpleAdapter(数据结构简单时使用)
private void threeSimpleAdapterCell() {
//创建4条数据
Map map1 = new HashMap();
map1.put("name", "张三");
map1.put("phone", "13311111111");
Map map2 = new HashMap();
map2.put("name", "李四");
map2.put("phone", "1344444444");
Map map3 = new HashMap();
map3.put("name", "王五");
map3.put("phone", "1355555555");
Map map4 = new HashMap();
map4.put("name", "赵六");
map4.put("phone", "1366666666");
//把数据加入到集合中
List
3.搭建本地服务器及xml解析;
搭建本地Apache服务器: https://blog.csdn.net/u012198209/article/details/81457160
//从网络中获取ListView的数据
private void initListData() {
new Thread() {
public void run() {//开一个子线程
try {
//记得开网络权限
// /Users/huzhongcheng/Sites
String pathStr = "http://192.168.1.107/AndroidData/homeMenuData.xml";
URL url = new URL(pathStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
int code = conn.getResponseCode();
if (code == 200) {
Log.d(TAG, "run: 请求成功");
InputStream in = conn.getInputStream();//获取服务器返回的数据流
Log.d(TAG, "run: 数据流" + in);
//解析返回的xml数据
listArr = MainListXmlUtils.parserXml(in);
Log.d(TAG, "run: 数据为" + listArr);
//回主线程更新UI
runOnUiThread(new Runnable() {
@Override
public void run() {
lv.setAdapter(new MyListAdapter());
}
});
} else {
Log.d(TAG, "run: 请求失败");
}
} catch (Exception e) {
Log.d(TAG, "run: 服务器异常");
e.printStackTrace();
}
};
}.start();
}
//数据model类
package com.biyu6.huzhongcheng.byandroidtest;
public class MainListModel {
private String img;
private String title;
private String desc;
public String getImg() {
return img;
}
public void setImg(String img) {
this.img = img;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
//首页list的xml数据解析器
public class MainListXmlUtils {
public static List parserXml(InputStream in) throws Exception {
List listArr = null;
MainListModel model = null;
//获取xml解析器
XmlPullParser parser = Xml.newPullParser();
//设置解析器要解析的内容
parser.setInput(in, "utf-8");
//获取解析的事件类型
int type = parser.getEventType();
while (type != XmlPullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG://解析开始节点
//判断解析的是哪个开始标签
if ("channel".equals(parser.getName())) {
listArr = new ArrayList();
} else if ("item".equals(parser.getName())) {
model = new MainListModel();
} else if ("title".equals(parser.getName())) {
model.setTitle(parser.nextText());
} else if ("desc".equals(parser.getName())) {
model.setDesc(parser.nextText());
} else if ("img".equals(parser.getName())) {
model.setImg(parser.nextText());
}
break;
case XmlPullParser.END_TAG://解析结束节点
if ("item".equals(parser.getName())) {
//把javabean添加到集合
listArr.add(model);
System.out.println("节点信息:" + model);
}
break;
default:
break;
}
//不停的向下解析
type = parser.next();
}
return listArr;
}
}
//homeMenuData.xml资源文件内容:
-
标题1:用ViewPager实现Tab
代码都在一个Activity中,维护不便!
http://192.168.1.107/AndroidData/Images/f1.png
-
标题2:
描述2:
http://192.168.1.107/AndroidData/Images/k2.jpg
-
标题3:
描述3:
http://192.168.1.107/AndroidData/Images/f2.jpg
-
标题4:
描述4:
http://192.168.1.107/AndroidData/Images/s5.png
4.去除标题栏title;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);//Activity继承自AppCompatActivity时,用他去除标题栏title
//requestWindowFeature(Window.FEATURE_NO_TITLE); //Activity继承自FragmentActivity时,用他去除标题栏title
setContentView(R.layout.activity_main);
//加载view
initView();
}
5.Intent意图的传值及跳转
//设置listView的点击事件
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
String titleStr = listArr.get(position).getTitle();
Log.d(TAG, "onItemClick: 点击了"+ titleStr);
switch (position) {
case 0:
//从当前跳转到TabViewPagerActivity的意图
Intent intent = new Intent(getApplicationContext(), TabViewPagerActivity.class);
/**意图传值
* Intent 能够以名为 extra 的键值对形式携带数据类型。
* 键是上面定义的公共常量 EXTRA_MESSAGE ,下一个 Activity 将用该键来检索文本值。
* 值是输入框中的值
*/
intent.putExtra(EXTRA_MESSAGE,titleStr);
startActivity(intent);
break;
default:
Toast.makeText(MainActivity.this, "敬请期待!", Toast.LENGTH_SHORT).show();
break;
}
}
});