主页面xml:
<include layout="@layout/title_wechat"></include>
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/pu_lv"
android:layout_width="match_parent"
app:ptrMode="both"
android:layout_height="match_parent">
</com.handmark.pulltorefresh.library.PullToRefreshListView>
**需要添加pulltorefresh依赖库**
详情页面xml:
<WebView
android:id="@+id/wv"
android:layout_width="match_parent"
android:layout_height="match_parent"></WebView>
自定义标题栏布局xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:background="#eb413d"
android:layout_height="50dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="WeChat新闻推送"
android:textColor="#fce6e6"
android:textSize="25sp"
android:layout_gravity="center"
android:gravity="center_vertical"/>
</LinearLayout>
MainAcvitity。Java
public class MainActivity extends AppCompatActivity {
private PullToRefreshListView pu_lv
private List<WeChatNews> list
public static final int PAGE=1
public static final int LOADING=2
private MyHandle handle=null
public int page =1
private WechatAdapter adapter=null
private String url="http://api.tianapi.com/qiwen/?key=4bd737c35d23201f3f97b7eeb4f043d3&num=10&page="
private String json=null
private String url1
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
pu_lv= (PullToRefreshListView) findViewById(R.id.pu_lv)
url1 = url + String.valueOf(page)
pu_lv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
page=1
getData()
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
page+=1
url1 = url + String.valueOf(page)
getData()
}
})
list=new ArrayList<>()
handle=new MyHandle()
getData()
adapter=new WechatAdapter(this,list)
adapter.notifyDataSetChanged()
pu_lv.setAdapter(adapter)
pu_lv.onRefreshComplete()
pu_lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
WeChatNews news=list.get(position-1)
String url=news.getUrl()
Intent intent=new Intent(view.getContext(),NewsActivity.class)
intent.putExtra("content",url)
startActivity(intent)
}
})
}
/**
* 获取数据
*/
private void getData(){
OkHttpClient client=new OkHttpClient()
Request request=new Request.Builder().url(url1).build()
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String str= response.body().string()
json=str
runOnUiThread(new Runnable() {
@Override
public void run() {
if(page==1){
handle.sendMessage(handle.obtainMessage(PAGE,json))
}else {
handle.sendMessage(handle.obtainMessage(page,json))
}
Thread.interrupted()
}
})
}
})
}
/**
* 解析json数据,构建展示的数据源
*/
private List<WeChatNews> parseJosn(String json){
List<WeChatNews> list1=new ArrayList<>()
if(TextUtils.isEmpty(json)){
return list1
}
try {
JSONObject object=new JSONObject(json)
JSONArray array=object.getJSONArray("newslist")
int code=object.getInt("code")
if(code==200){
for (int i = 0
JSONObject obj=array.getJSONObject(i)
WeChatNews news=new WeChatNews()
news.setTitle(obj.getString("title"))
news.setDescription(obj.getString("description"))
news.setCtime(obj.getString("ctime"))
news.setPicUrl(obj.getString("picUrl"))
news.setUrl(obj.getString("url"))
list1.add(news)
}
}
} catch (JSONException e) {
e.printStackTrace()
}
return list1
}
class MyHandle extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg)
switch (msg.what){
case PAGE:
list=parseJosn(msg.obj.toString())
adapter.setList(list)
adapter.notifyDataSetChanged()
break
case LOADING:
list.addAll(parseJosn(msg.obj.toString()))
adapter.notifyDataSetChanged()
break
default:
list.addAll(parseJosn(msg.obj.toString()))
adapter.notifyDataSetChanged()
break
}
pu_lv.onRefreshComplete()
}
}
详情页面NewsAcvitity。Java
public class NewsActivity extends AppCompatActivity {
private WebView wv;
private String url_content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news);
wv= (WebView) findViewById(R.id.wv);
wv.setWebViewClient(new MyClient());
Intent intent=getIntent();
url_content=intent.getStringExtra("content");
wv.loadUrl(url_content);
wv.getSettings().setBuiltInZoomControls(true);
wv.getSettings().setDisplayZoomControls(false);
wv.getSettings().setUseWideViewPort(true);
wv.getSettings().setLoadWithOverviewMode(true);
wv.getSettings().setAppCacheEnabled(true);
wv.getSettings().setDatabaseEnabled(true);
wv.getSettings().setDomStorageEnabled(true);
wv.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
}
class MyClient extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if(Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP){
view.loadUrl(request.getUrl().toString());
}
return super.shouldOverrideUrlLoading(view, request);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url_content);
return super.shouldOverrideUrlLoading(view, url);
}
}