时间:2021-05-20
首先我们先看一下要模拟的界面
我们主要实现的就是ListView解析json文件中的数据,UI布局很简单不做赘述。
这里我们需要一个服务器来实现数据的动态更新, 这里我们用到的是Tomcat8.0。
首先我们把需要解析的json文件放置到Tomcat的webapp文件下的ROOT里面,方便我们解析。
首先我们创建一个JsonParse类用来解析json文件:
创建json文件的实体类:
package cn.edu.bzu.myapplication.entity;/** * Created by Becauseshy on 2017/5/17. */public class NewsInfo { private String iconPath; private String title; private String description; private int type; private long comment; public String getIconPath() { return iconPath; } public void setIconPath(String iconPath) { this.iconPath = iconPath; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public int getType() { return type; } public void setType(int type) { this.type = type; } public long getComment() { return comment; } public void setComment(long comment) { this.comment = comment; }}activity_main.xml:
<?xml version="1.0" encoding="utf-8"?><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" tools:context=".MainActivity" android:orientation="vertical"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/loading" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" android:visibility="invisible"> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在加载信息..." /> </LinearLayout> <ListView android:id="@+id/lv_news" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout></LinearLayout>item的布局文件:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="65dp"> <com.loopj.android.image.SmartImageView android:id="@+id/siv_icon" android:layout_width="80dp" android:layout_height="60dp" android:scaleType="centerCrop" android:src="@mipmap/ic_launcher" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"></com.loopj.android.image.SmartImageView> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginTop="10dp" android:layout_toRightOf="@id/siv_icon" android:ellipsize="end" android:maxLength="20" android:singleLine="true" android:text="我是标题" android:textColor="#000000" android:textSize="18sp" /> <TextView android:id="@+id/tv_description" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tv_title" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" android:layout_toRightOf="@id/siv_icon" android:ellipsize="end" android:maxLength="16" android:maxLines="1" android:text="我是描述" android:textColor="#99000000" android:textSize="14sp" /> <TextView android:id="@+id/tv_type" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="5dp" android:layout_marginRight="10dp" android:text="评论" android:textColor="#99000000" android:textSize="12sp" /></RelativeLayout>适配器代码:
package cn.edu.bzu.myapplication.adapter;/** * Created by Becauseshy on 2017/5/17. */import android.content.Context;import android.graphics.Color;import android.support.annotation.NonNull;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.TextView;import com.loopj.android.image.SmartImageView;import java.util.List;import cn.edu.bzu.myapplication.R;import cn.edu.bzu.myapplication.entity.NewsInfo;public class NewAdapter extends ArrayAdapter<NewsInfo>{private int resourceID; public NewAdapter(Context context, int resource, List<NewsInfo> objects) { super(context, resource, objects); resourceID=resource; } @Override public View getView(int position, View convertView, ViewGroup parent) { NewsInfo fruit=getItem(position); View view; ViewHolder viewHolder; if(convertView==null){ view=LayoutInflater.from(getContext()).inflate(resourceID,null); viewHolder=new ViewHolder(); viewHolder.siv=(SmartImageView)view.findViewById(R.id.siv_icon); viewHolder.tv_title=(TextView)view.findViewById(R.id.tv_title); viewHolder.tv_description=(TextView)view.findViewById(R.id.tv_description); viewHolder.tv_type=(TextView)view.findViewById(R.id.tv_type); view.setTag(viewHolder); }else{ view=convertView; viewHolder= (ViewHolder) view.getTag(); } viewHolder.siv.setImageUrl(fruit.getIconPath(),R.drawable.a,R.drawable.ic_launcher); viewHolder.tv_title.setText(fruit.getTitle()); viewHolder.tv_description.setText(fruit.getDescription()); int type=fruit.getType(); switch (type){ case 1: viewHolder.tv_type.setText("评论:"+fruit.getComment()); viewHolder.tv_type.setTextColor(Color.BLUE); break; case 2: viewHolder.tv_type.setText("专题"); viewHolder.tv_type.setTextColor(Color.BLACK); break; case 3: viewHolder.tv_type.setText("LIVE"); viewHolder.tv_type.setTextColor(Color.RED); break; } return view; } class ViewHolder{ SmartImageView siv; TextView tv_title; TextView tv_description; TextView tv_type; }}MainActivity实现代码:
package cn.edu.bzu.myapplication;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.Toast;import com.loopj.android.http.AsyncHttpClient;import com.loopj.android.http.AsyncHttpResponseHandler;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.List;import cn.edu.bzu.myapplication.Tools.JsonParse;import cn.edu.bzu.myapplication.adapter.NewAdapter;import cn.edu.bzu.myapplication.entity.NewsInfo;import cn.edu.bzu.myapplication.model.Fruit;public class MainActivity extends AppCompatActivity { private ListView Iv_news; private NewAdapter newAdapter; private List<NewsInfo> newInfos; private LinearLayout loading; private JsonParse jsonParse; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Iv_news= (ListView) findViewById(R.id.lv_news); newAdapter =new NewAdapter(this,R.layout.news_item,newInfos); loading= (LinearLayout) findViewById(R.id.loading); prepareData(); } private void prepareData() { //fruitList=new ArrayList<>(); //Fruit apple=new Fruit("Apple",R.drawable.apple_pic); // fruitList.add(apple); AsyncHttpClient asyncHttpClient=new AsyncHttpClient(); asyncHttpClient.get(getString(R.string.serverurl), new AsyncHttpResponseHandler() { @Override public void onSuccess(int i, cz.msebera.android.httpclient.Header[] headers, byte[] bytes) { try { String json=new String(bytes,"utf-8"); newInfos=jsonParse.getNewInfo(json); if(newInfos==null){ Toast.makeText(MainActivity.this,"解析失败",Toast.LENGTH_SHORT).show(); } else { loading.setVisibility(View.INVISIBLE); Iv_news.setAdapter(newAdapter); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } @Override public void onFailure(int i, cz.msebera.android.httpclient.Header[] headers, byte[] bytes, Throwable throwable) { Toast.makeText(MainActivity.this,"请求失败",Toast.LENGTH_SHORT).show(); } }); }}在values文件加下的String.xml文件中添加:
<string name="serverurl">http://172.16.26.58:8080/newInfo.xml</string>
最后一定不要忘了添加网络访问权限, 这很重要, 好多同学都犯了这个错误、
这样基本功能就实现了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
关于实现网易新闻客户端的界面,以前写过很多博客,请参考:Android实现网易新闻客户端效果Android实现网易新闻客户端侧滑菜单(一)Android实现网易
很多刚接触网易新闻客户端的用户,不知道在其中如何修改正文字体?接下来就为你们讲解网易新闻客户端中修改正文字体的流程介绍。 1、打开网易新闻客户端,进入网易新
前面已经讲过通过三方开源库SlideMenu来实现这种效果,请参考Android实现网易新闻客户端侧滑菜单(一)今天通过自定义View来实现这种功能。代码如下:
你们知道在网易新闻客户端中如何修改头像吗?不太明白的用户就随着小编一起去下面看看网易新闻客户端中修改头像的详细流程介绍。 1、首先,下载安软市场最新版的网易
先来看看网易新闻客户端以及自己实现的效果图,效果当然还是网易的好gridviewsort.gif如何实现拖拽一个Item用WindowManager添加一个Im