您的位置:首页 > 移动开发 > Android开发

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

2015-05-12 10:32 513 查看
1.根据内容要求,首先我们要创建新闻实体类;

实体类的内容包括:

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

  (2.)作者名称--------------------------------NewsName 

(3.)发布时间--------------------------------NewsData  

(4.)新闻内容--------------------------------NewsText

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

代码如下:

[html]
view plaincopyprint?

/***  
 * 发布信息用户实体类  
 * 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;  
    }  
}  

/***
* 发布信息用户实体类
* 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代码:

[html]
view plaincopyprint?

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

<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文件代码:

[html]
view plaincopyprint?

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

<?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用来存放数据;

具体代码如下:

[java]
view plaincopyprint?

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;  
   }  
}  

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之间的关联

 具体代码如下:

[java]
view plaincopyprint?

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"));  
    }  
  
}  

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.创建模拟器,并运行项目

项目显示成功

如图:



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: