12月1日备课-Fragment+WebView展示详情页

用的cnblog的开放接口

MainActivity

package com.example.fragment2news;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;

import com.example.fragment2news.beans.News;
import com.example.fragment2news.fragments.FragmentA;
import com.example.fragment2news.fragments.FragmentA.OnItemClickedListener;
import com.example.homeworkfragment2news.R;

public class MainActivity extends Activity implements OnItemClickedListener {

    public static final String URL_CONTENT = "http://wcf.open.cnblogs.com/news/item/";
    public List<News> newsList;
    public News news;
    private WebView web;
    FragmentManager manager;
    FragmentTransaction transaction;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        web = (WebView) findViewById(R.id.webview);
        manager = getFragmentManager();
        transaction = manager.beginTransaction();
        new Download()
                .execute("http://wcf.open.cnblogs.com/news/recommend/paged/1/10");
    }

    class Download extends AsyncTask<String, Void, List<News>> {

        @Override
        protected List<News> doInBackground(String... params) {

            HttpClient client = new DefaultHttpClient();
            HttpGet get = new HttpGet(params[0]);
            Log.i("tag", "1");

            try {
                HttpResponse res = client.execute(get);
                if (res.getStatusLine().getStatusCode() == 200) {
                    HttpEntity entity = res.getEntity();
                    InputStream is = entity.getContent();
                    // 解析
                    List<News> data = new ParseXMLString().getNews(is);
                    System.out.println(data.toString());
                    return data;
                }

            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        // 在这个方法里给fragment
        @Override
        protected void onPostExecute(List<News> result) {
            super.onPostExecute(result);
            transaction.replace(R.id.container_A, new FragmentA(result));
            transaction.commit();
            System.out.println("完成");
        }
    }

    class ParseXMLString {
        public List<News> getNews(InputStream is) {
            try {
                // 实例化集合和news
                newsList = new ArrayList<News>();
                XmlPullParserFactory factory = XmlPullParserFactory
                        .newInstance();
                XmlPullParser parser = factory.newPullParser();
                parser.setInput(is, "utf-8");
                int eventType = parser.getEventType();
                while (eventType != XmlPullParser.END_DOCUMENT) {
                    switch (eventType) {
                    case XmlPullParser.START_TAG:
                        String name = parser.getName();
                        if ("entry".equals(name)) {
                            news = new News();
                        } else if (news != null) {
                            if ("title".equals(name)) {
                                news.setTitle(parser.nextText());
                            } else if ("id".equals(name)) {
                                news.setId(Integer.parseInt(parser.nextText()));
                            }
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        String endName = parser.getName();
                        if ("entry".equals(endName)) {
                            newsList.add(news);
                            System.out.println("数据:" + newsList.toString());
                        }
                        break;
                    }
                    eventType = parser.next();
                }
                return newsList;
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }

    @Override
    public void getId(int id) {
        // 执行更新webView
        System.out.println("ID为:"+id);
        new DownloadContent().execute(URL_CONTENT+id);
    }
    class DownloadContent extends AsyncTask<String, Void, String>{

        @Override
        protected String doInBackground(String... params) {
            HttpClient client = new DefaultHttpClient();
            HttpGet get = new HttpGet(params[0]);
            String content = null;
            try {
                HttpResponse res = client.execute(get);
                if (res.getStatusLine().getStatusCode() == 200) {
                    HttpEntity entity = res.getEntity();
                    InputStream is = entity.getContent();
                    XmlPullParserFactory factory = XmlPullParserFactory
                            .newInstance();
                    XmlPullParser parser = factory.newPullParser();
                    parser.setInput(is, "utf-8");
                    int eventType = parser.getEventType();

                    while (eventType != XmlPullParser.END_DOCUMENT) {
                        switch (eventType) {
                        case XmlPullParser.START_TAG:
                            String start = parser.getName();
                            if ("Content".equals(start)) {
                                content = parser.nextText();
                            }
                            break;
                        default:
                            break;
                        }
                        eventType = parser.next();
                    }
                    return content;
                }
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            }
            return null;
        }
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            System.out.println("result:"+result);
            web.loadDataWithBaseURL(null, result, "text/html", "utf-8", null);  
        }
    }
}

FragmentA

package com.example.fragment2news.fragments;

import java.util.ArrayList;
import java.util.List;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import com.example.fragment2news.beans.News;
import com.example.homeworkfragment2news.R;

@SuppressLint("ValidFragment")
public class FragmentA extends Fragment {
//  private MyAdapter adapter;
    private List<News> data;
    List<String> title;
    public FragmentA(List<News> data){
        this.data=data;
        System.out.println("fragmentA中得到的数据"+data.toString());
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        title=new ArrayList<String>();
        for (News news : data) {
            title.add(news.getTitle());
        }
        View view = inflater.inflate(R.layout.fragment_a, container, false);
        ListView lv=(ListView) view.findViewById(R.id.fragment_A_listview);
        lv.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, title));

        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Activity activity = getActivity();
                if(activity instanceof OnItemClickedListener){
                    OnItemClickedListener listener=(OnItemClickedListener)getActivity();
                    String titleString = title.get(position);
//                  Toast.makeText(getActivity(), titleString, 0).show();
                    //找到对应的id
                    int titleID=0;
                    for (News news : data) {
                        if(news.getTitle().equals(titleString)){
                            System.out.println("找到了"+titleString+"的ID");
                            titleID=news.getId();
                        }
                    }
                    System.out.println("没有找到了"+titleString+"的ID");
                    listener.getId(titleID);
                }else{
                    throw new RuntimeException("不是OnItemClickedListener的子类");
                }
            }
        });
        return view;
    }

    public interface OnItemClickedListener{
        abstract void getId(int id);
    }
}

News

package com.example.fragment2news.beans;

public class News {
    private String title;
    private int id;
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    @Override
    public String toString() {
        return "News [title=" + title + ", id=" + id + "]";
    }

}

Layout:
activity_main.xml

<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" >

    <LinearLayout
        android:id="@+id/container_A"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/container_B"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="2"
        android:orientation="vertical" >

        <WebView
            android:id="@+id/webview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </LinearLayout>

</LinearLayout>

fragment_a

<?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" >

    <ListView
        android:id="@+id/fragment_A_listview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>

效果:
这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值