一个小应用解析webview,adapter,以及listview中item点击事件

最近搞了一个类似NBA新闻的小APP,主要使用的就是webview,adapter,以及listview中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点击事件。以及成就感,多写代码是进步最快的方法。



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值