一个小应用解析webview,adapter,以及listview中item点击事件
2015-11-05 17:18
423 查看
最近搞了一个类似NBA新闻的小APP,主要使用的就是webview,adapter,以及listview中item点击事件。
上效果图:
点击每个item可以跳转到另一个web页面,比如点击第三个item将跳转到我的个人博客。
话不多说,上代码:
MainActivity.java
info.xml
点击item后跳转到另一个Activity,以第三个item为例:
Me.java
之后记得在androidmanifest文件中注册activity以及获取网络权限
AndroidManifest.xml
1.listview搭配的类继承自listactivity的时候,需要把ID设为@id/android:list,同时在activity中用getListView()获取到这个listview。
2.好几次unfortunately has stopped,一看logcat发现有一个是java.lang.nullpointerexception,空指针异常,才明白在java中不能随便用空指针,百度百科一下发现
当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括:
调用 null 对象的实例方法。
访问或修改 null 对象的字段。
如果一个数组为null,试图用属性length获得其长度时。
如果一个数组为null,试图访问或修改其中某个元素时。
在需要抛出一个异常对象,而该对象为 null 时。
所以尽量避免使用空指针。
还有的是androidmanifest.xml中activity没注册,以及把adapter中的R,layout.layout写成了R.layout.activity_main。
3.当上述问题解决后已经可以运行了,然而网页加载不出,安装时也没有显示需要网络权限,于是我查了下androidmanifest.xml中发现<uses-permission android:name="android.permission.INTERNET"/>我写成了<uses-permission android:name="ANDROID.PERMISSION.INTERNET"/>更可怕的是居然没报错。。。
我查了一下所有的常见permission都是小写加大写,改过来之后APP可以正常运行了。记得还有一次用handler传递message的时候也是,代码正常却报错了,查了好几遍才发现handler引错包了,该
结果搞成了
改正过来就好了,还有之前使用handler遇到了内存泄露问题,先记下,日后再解决。
再浅浅谈一下这次coding中学到的东西
基本上就是标题说的webview,listview中每个item样式的设置,还有adapter绑定item样式,item点击事件。以及成就感,多写代码是进步最快的方法。
上效果图:
点击每个item可以跳转到另一个web页面,比如点击第三个item将跳转到我的个人博客。
话不多说,上代码:
MainActivity.java
<span style="font-size:18px;">package com.example.administrator.mytestadapter; import android.app.ListActivity; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.SimpleAdapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; public class MainActivity extends ListActivity { private ListView mylistview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mylistview= getListView(); final List<Map<String,Object>> list=new ArrayList<Map<String,Object>>(); final Map<String,Object> map0=new HashMap<String,Object>(); final Map<String,Object> map1=new HashMap<String,Object>(); final Map<String,Object> map2=new HashMap<String,Object>(); final Map<String,Object> map3=new HashMap<String,Object>(); final Map<String,Object> map4=new HashMap<String,Object>(); map0.put("img", R.drawable.dayanmei);//drawable中保存的图像文件名 map0.put("title", "我的女神"); map0.put("info", "一只眼睛超大的蚊子,哈哈"); list.add(map0); map1.put("img", R.drawable.claus); map1.put("title", "我的男神"); map1.put("info", "初代吸血鬼男主角,约瑟夫摩根"); list.add(map1); map2.put("img", R.drawable.haha); map2.put("title", "老来疯"); map2.put("info", ""); list.add(map2); map3.put("img", R.drawable.luoli); map3.put("title", "我的未来老婆"); map3.put("info", "还在上幼儿园"); list.add(map3); map4.put("img", R.drawable.kobe); map4.put("title", "科比布莱恩特"); map4.put("info","一个我追了十年的人,激励我不断努力。"); list.add(map4); SimpleAdapter adapter=new SimpleAdapter(this,list, R.layout.layout,new String[]{"img","title","info"}, new int[]{R.id.img,R.id.title,R.id.info}); mylistview.setAdapter(adapter); mylistview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (list.get(position).equals(map0)){ Intent i=new Intent(MainActivity.this,Dayanmei.class); startActivity(i); } else if(list.get(position).equals(map1)){ startActivity(new Intent(MainActivity.this,Claus.class)); } else if(list.get(position).equals(map2)){ startActivity(new Intent(MainActivity.this,Me.class)); } else if(list.get(position).equals(map3)){ startActivity(new Intent(MainActivity.this,Luoli.class)); } else if(list.get(position).equals(map4)){ startActivity(new Intent(MainActivity.this,Kobe.class)); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } } </span>主界面activity_main.xml:
<span style="font-size:18px;"><LinearLayout 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:paddingLeft="@dimen/activity_horizontal_margin" android:orientation="vertical" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:layout_width="fill_parent" android:layout_height="40dp" android:id="@+id/textview" android:text="Itemlists:" android:textSize="30dp" android:textColor="#f0f"/> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@id/android:list" //此处id必须为@id/android:list,因为MainActivity继承自ListActivity android:dividerHeight="18dp" //而继承自listactivity的类会自动在xml中寻找一个ID为list的listview。 android:divider="#00000000" //dividerheight减小item之间间距,divider设置item间分割线透明 android:layout_alignParentTop="true"> </ListView> </LinearLayout> </span>listview中每个item的样式在layout.xml中定义:
<span style="font-size:18px;"><?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="match_parent"> <ImageView android:layout_width="80dp" android:layout_height="60dp" android:scaleType="fitXY" //使图片适应屏幕大小 android:id="@+id/img"/> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20dp" android:textColor="#f0f" android:paddingLeft="10dp"/> <TextView android:id="@+id/info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14dp" android:paddingLeft="10dp"/> </LinearLayout> </LinearLayout> </span>点击item后出现的web网页
info.xml
<span style="font-size:18px;"><?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="match_parent" android:orientation="vertical"> <WebView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/webview"> </WebView> </LinearLayout> </span>
点击item后跳转到另一个Activity,以第三个item为例:
Me.java
<span style="font-size:18px;">package com.example.administrator.mytestadapter; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; /** * Created by Administrator on 2015/11/3. */ public class Me extends Activity { private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.info); webView= (WebView) findViewById(R.id.webview); WebSettings webSettings=webView.getSettings(); webSettings.setJavaScriptEnabled(true);//设置可读取JavaScript网页 webSettings.setAllowFileAccess(true);//可读取文件 webSettings.setBuiltInZoomControls(true); webView.loadUrl("http://blog.csdn.net/qq_29407877");//要跳转的网页地址 webView.setWebViewClient(new WebViewClient()); } private class webViewClient extends WebViewClient{ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } } } </span>
之后记得在androidmanifest文件中注册activity以及获取网络权限
AndroidManifest.xml
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.administrator.mytestadapter" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Claus"></activity> <activity android:name=".Dayanmei"></activity> <activity android:name=".Luoli"></activity> <activity android:name=".Me"></activity> <activity android:name=".Kobe"/> </application> <uses-permission android:name="android.permission.INTERNET"/>//获取网络权限 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>//获取网络状态权限 </manifest> </span>大致的代码就是酱紫,说说coding过程中遇到的问题吧
1.listview搭配的类继承自listactivity的时候,需要把ID设为@id/android:list,同时在activity中用getListView()获取到这个listview。
2.好几次unfortunately has stopped,一看logcat发现有一个是java.lang.nullpointerexception,空指针异常,才明白在java中不能随便用空指针,百度百科一下发现
当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括:
调用 null 对象的实例方法。
访问或修改 null 对象的字段。
如果一个数组为null,试图用属性length获得其长度时。
如果一个数组为null,试图访问或修改其中某个元素时。
在需要抛出一个异常对象,而该对象为 null 时。
所以尽量避免使用空指针。
还有的是androidmanifest.xml中activity没注册,以及把adapter中的R,layout.layout写成了R.layout.activity_main。
3.当上述问题解决后已经可以运行了,然而网页加载不出,安装时也没有显示需要网络权限,于是我查了下androidmanifest.xml中发现<uses-permission android:name="android.permission.INTERNET"/>我写成了<uses-permission android:name="ANDROID.PERMISSION.INTERNET"/>更可怕的是居然没报错。。。
我查了一下所有的常见permission都是小写加大写,改过来之后APP可以正常运行了。记得还有一次用handler传递message的时候也是,代码正常却报错了,查了好几遍才发现handler引错包了,该
import android.os.Handler
结果搞成了
import java.util.logging.Handler
改正过来就好了,还有之前使用handler遇到了内存泄露问题,先记下,日后再解决。
再浅浅谈一下这次coding中学到的东西
基本上就是标题说的webview,listview中每个item样式的设置,还有adapter绑定item样式,item点击事件。以及成就感,多写代码是进步最快的方法。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories