用的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>
效果: