Android模拟新浪微博随便看看栏目

来源:互联网 发布:淘宝推广外站 编辑:程序博客网 时间:2024/06/05 22:54

1.根据内容要求,首先我们要创建新闻实体类;

实体类的内容包括:

(1.)头像————————————–iNewsImg(存放的是图片的Id)

(2.)作者名称——————————–NewsName

(3.)发布时间——————————–NewsData

(4.)新闻内容——————————–NewsText

并添加Get、Set方法和构造方法

代码如下:

/***   * 发布信息用户实体类   * 2015.05.04   */  package cn.edu.bzu.entity;  public class Center {      private String NewsName;      private int NewsImg;      private String NewsText;      private String NewsDate;      public Center(String newsName, int newsImg, String newsText, String newsDate) {          super();          NewsName = newsName;          NewsImg = newsImg;          NewsText = newsText;          NewsDate = newsDate;      }      public String getNewsName() {          return NewsName;      }      public void setNewsName(String newsName) {          NewsName = newsName;      }      public  int getNewsImg() {          return NewsImg;      }      public void setNewsImg(int newsImg) {          NewsImg = newsImg;      }      public String getNewsText() {          return NewsText;      }      public void setNewsText(String newsText) {          NewsText = newsText;      }      public String getNewsDate() {          return NewsDate;      }      public void setNewsDate(String newsDate) {          NewsDate = newsDate;      }  }  

2.布局

(1.)在activity_main.xml中添加一个ListView控件

(2.)创建一个新的XML布局方式为相对布局,添加ImageView,和三个TextView控件,分别显示头像、用户名、新闻内容和发布时间

布局代码如下:

Acyivity代码:

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world" /></RelativeLayout>

新建立XML文件代码:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/RelativeLayout1"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <ImageView        android:id="@+id/NewImg"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentTop="true"        android:src="@drawable/p1" />    <TextView        android:id="@+id/NewsData"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignBaseline="@+id/textView1"        android:layout_alignBottom="@+id/textView1"        android:layout_alignParentRight="true"        android:text="TextView" />    <TextView        android:id="@+id/NewsName"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentTop="true"        android:layout_toRightOf="@+id/NewImg"        android:text="Medium Text"        android:textAppearance="?android:attr/textAppearanceMedium" />    <TextView        android:id="@+id/NewsText"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/NewsName"        android:layout_marginLeft="15dp"        android:layout_toRightOf="@+id/NewImg"        android:text="Medium Text"        android:textAppearance="?android:attr/textAppearanceMedium" /></RelativeLayout>

3.创建适配器

系统所提供的Adapter适配器不能满足我们现在的需要,所以我们要自定义一个适配器NewsAdapter,继承ArrayAdapter

重写getView方法

getView方法:

该方法是每个子项再被滚动到屏幕的时候会被调用;里面有三个参数:

(1.)当前获取对象的Id,在getView()中取出这个对象;

(2.)getView()方法中还有一个convertView参数,这个参数用于将之前加载好的布局进行缓存,以便之后可以进行重用;

为了使代码更具有可读性,在GetView()方法中定义了一个内部类viewHolder用来存放数据;

具体代码如下:

package com.example.news1;import java.util.List;import cn.edu.bzu.entity.Center;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.TextView;public class NewsAdapter extends ArrayAdapter<Center> {    private int resource;    public NewsAdapter(Context context, int textViewResourceId,            List<Center> objects) {        super(context, textViewResourceId, objects);        resource=textViewResourceId;    }    /***     * 重写GetView方法     */    //getView()方法中还有一个convertView参数,这个参数用于将之前加载好的布局进行缓存,以便之后可以进行重用    public View getView(int position,View convertView,ViewGroup parent)    {        View view=null;        viewHolder viewholder;        Center center=(Center)getItem(position);        if(convertView==null){            view=LayoutInflater.from(getContext()).inflate(resource, null);            viewholder=new viewHolder();            viewholder.NewsImg=(ImageView)view.findViewById(R.id.NewImg);            viewholder.NewsName=(TextView)view.findViewById(R.id.NewsName);            viewholder.NewsText=(TextView)view.findViewById(R.id.NewsText);            viewholder.NewsData=(TextView)view.findViewById(R.id.NewsData);            view.setTag(viewholder);        }        else{            view=convertView;            viewholder=(viewHolder)convertView.getTag();        }        viewholder.NewsImg.setImageResource(center.getNewsImg());        viewholder.NewsName.setText(center.getNewsName());        viewholder.NewsText.setText(center.getNewsText());        viewholder.NewsData.setText(center.getNewsDate());        return view;    }   class viewHolder   {       ImageView NewsImg;       TextView NewsName;       TextView NewsText;       TextView NewsData;   }}

4.在MainActivity中的操作:

(1.)获取activity_main中的ListView控件

(2.)在MainActivity中添加一个方法用来创建新的新闻内容放入创建好的List列表中去;

(3.)获取数据,并创建适配器,将布局的Id和数据信息传递给自定义的适配器NewsAdapter;

(4.)用SetAdapter()方法绑定AdapterView和Adapter之间的关联

具体代码如下:

package com.example.news1;import java.util.ArrayList;import java.util.List;import cn.edu.bzu.entity.Center;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.widget.ListView;public class MainActivity extends Activity {    private ListView lvNews;    private List<Center> list=new ArrayList<Center>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        lvNews=(ListView) findViewById(R.id.lvNews);        //1.获取数据        addNews();        //2.创建适配器        NewsAdapter adapter=new NewsAdapter(this, R.layout.news_item, list);        //适配器与控件的绑定        lvNews.setAdapter(adapter);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    private void addNews()    {        list.add(new Center("小王", R.drawable.p1, "中国国家主席习近平于5月7日至12日出席在莫斯科举行的纪念卫国战争胜利" +                "70周年庆典并访问俄罗斯、哈萨克斯坦、白俄罗斯", "2015-05-06"));        list.add(new Center("小李", R.drawable.p2, "他是刘少奇的俄籍长孙,48岁才第一次踏上中国的土地。他的俄罗斯名字叫阿" +                "廖沙,中文取名刘维宁。在他敞亮的广州办公室里,与新浪新闻的对话持续了近4个小时。", "2015-05-06"));        list.add(new Center("小张", R.drawable.p3, "昨日,中共中央政治局常委、国务院总理李克强先后来到中国科学院和北京中关" +                "村创业大街考察调研。这是李克强在中科院物理所超导实验室考察。", "2015-05-06"));        list.add(new Center("小胡", R.drawable.p4, "日前,经中共中央批准,中共中央纪委对河北省委原常委、秘书长景春华严重违纪" +                "问题进行了立案审查。", "2015-05-06"));        list.add(new Center("小明", R.drawable.p5, " 美国研究机构指出,最新的卫星图像显示,越南在有主权争议的南海两处地点填海" +                "造地,美国国务院及军方暂时未有评论图像。", "2015-05-06"));        list.add(new Center("小红", R.drawable.p6, "常州一小区发生家庭惨剧,一名醉酒男子持刀砍伤前妻和前丈母娘,他们的9岁的儿子奋起反击又把父亲砍伤。", "2015-05-06"));        list.add(new Center("小刘", R.drawable.p7, "龙潭某小区的徐女士突然失踪了,家人向派出所报了警,警方调查后发现徐女士被一个黑衣男子带走了。", "2015-05-06"));        list.add(new Center("小黑", R.drawable.p8, "11111111111111111111111111111", "2015-05-06"));        list.add(new Center("小丽", R.drawable.p9, "222222222222222222222222222222", "2015-05-06"));        list.add(new Center("小花", R.drawable.p10, "3333333333333333333333333333", "2015-05-06"));    }}

5.创建模拟器,并运行项目

项目显示成功

如图:
这里写图片描述

0 0