新闻展示例子(解析json+利用ViewPager+Fragment+actionbar实现左右滑动)

json:http://m2.qiushibaike.com/article/list/suggest?page=1&count=10

activity_main.xml

<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" >
    
    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        />

</RelativeLayout>

hot_layout.xml

<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:id="@+id/hot_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="162dp"
        android:text="Hot" />

</RelativeLayout>

image_layout.xml

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

    <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="137dp"
        android:layout_marginTop="196dp"
        android:src="@drawable/ic_launcher" />
    
</RelativeLayout>

suggest_layout.xml

<?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/suggest_listView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="textFragment" />

</LinearLayout>

text_layout

<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:id="@+id/tv_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="100dp"
        android:layout_marginTop="80dp"
        android:text="TEXT" />

</RelativeLayout>

 

HotFragment.java

package com.example.fragment;

import com.example.fq5.R;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class HotFragment extends Fragment{
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // TODO Auto-generated method stub
    View view=    inflater.inflate(R.layout.hot_layout, null);
        return view;
    }
}

ImageFragment.java

package com.example.fragment;

import com.example.fq5.R;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class ImageFragment extends Fragment{
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // TODO Auto-generated method stub
    View view=    inflater.inflate(R.layout.image_layout, null);
        return view;
    }
}

TextFragment.java

package com.example.fragment;

import com.example.fq5.R;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class TextFragment extends Fragment{
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // TODO Auto-generated method stub
    View view=    inflater.inflate(R.layout.text_layout, null);
        return view;
    }
}

 

MainActivity.java

package com.example.fq5;

import com.example.fragment.HotFragment;
import com.example.fragment.ImageFragment;
import com.example.fragment.SuggestFragment;
import com.example.fragment.TextFragment;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Menu;

public class MainActivity extends FragmentActivity {
    // 可滑动控件
    ViewPager viewPager;
    // 碎片数组
    Fragment[] fgt = new Fragment[4];

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager = (ViewPager) findViewById(R.id.viewPager);
        // 初始化碎片并添加数组中
        fgt[0] = new SuggestFragment();
        fgt[1] = new TextFragment();
        fgt[2] = new ImageFragment();
        fgt[3] = new HotFragment();
        // 添加适配器显示
        viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {

            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return fgt.length;
            }

            @Override
            public Fragment getItem(int arg0) {
                // TODO Auto-generated method stub
                return fgt[arg0];
            }
        });
        final ActionBar actionBar = getActionBar();
        // 导航模式
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        // 获取导肮文字数组
        String[] tab_text = getResources().getStringArray(R.array.tab_text);
        // 根据fragment数量添加标签
        for (int i = 0; i < fgt.length; i++) {
            actionBar.addTab(actionBar.newTab().setText(tab_text[i]).setTabListener(new TabListener() {
                // 未选中
                @Override
                public void onTabUnselected(Tab tab, FragmentTransaction ft) {
                    // TODO Auto-generated method stub

                }

                // 选中
                @Override
                public void onTabSelected(Tab tab, FragmentTransaction ft) {
                    // TODO Auto-generated method stub
                    viewPager.setCurrentItem(tab.getPosition());
                }

                // 重选
                @Override
                public void onTabReselected(Tab tab, FragmentTransaction ft) {
                    // TODO Auto-generated method stub

                }
            }));
            viewPager.setOnPageChangeListener(new OnPageChangeListener() {
                // 滑动完毕
                @Override
                public void onPageSelected(int arg0) {
                    // TODO Auto-generated method stub
                    getActionBar().setSelectedNavigationItem(arg0);

                }

                /*
                 * arg0 当前页面 arg1 滑动比例 arg2 滑动像素
                 */
                @Override
                public void onPageScrolled(int arg0, float arg1, int arg2) {
                    // TODO Auto-generated method stub

                }

                // 滑动状态改变
                /*
                 * 0什么没做 1正在滑动 2滑动完毕
                 */
                @Override
                public void onPageScrollStateChanged(int arg0) {
                    // TODO Auto-generated method stub

                }
            });
        }
    }

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

}

values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">FQ5</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>

    <string-array name="tab_text">
        <item>推荐</item>
        <item>純文</item>
        <item>純图</item>
        <item>热门</item>
    </string-array>

</resources>

 

-------------------------------------------------------------------------------

SuggestFragment.java

package com.example.fragment;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.example.adapter.SuggestAdapter;
import com.example.bean.UserBean;
import com.example.fq5.R;
import com.example.utils.NetUtils;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.Toast;

public class SuggestFragment extends Fragment {

    private ListView suggest_listView;
    private NetUtils netUtils = new NetUtils();

    private SuggestAdapter adapter;

    Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            // 从message中得到list集合
            List<UserBean> list = (List<UserBean>) msg.obj;
            // 初始化适配器
            adapter = new SuggestAdapter(getActivity(), list, handler);
            // 添加到listView
            suggest_listView.setAdapter(adapter);
            Toast.makeText(getActivity(), "" + list.size(), 1).show();
        };
    };

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // 初始化布局
        View view = inflater.inflate(R.layout.suggest_layout, null);
        suggest_listView = (ListView) view.findViewById(R.id.suggest_listView);

        new Thread() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                super.run();
                String result = netUtils
                        .getJsonString("http://m2.qiushibaike.com/article/list/suggest?page=1&count=10");
                List<UserBean> list = parse(result);
                // 创建message对象
                Message message = handler.obtainMessage();
                message.obj = list;
                // 发送消息
                handler.sendMessage(message);
            }
        }.start();

        return view;
    }
    /*
     * Json解析
     */

    private List<UserBean> parse(String jsonString) {
        // 新建集合
        List<UserBean> list = new ArrayList<UserBean>();
        try {
            JSONObject object = new JSONObject(jsonString);
            JSONArray jsa = object.getJSONArray("items");
            for (int i = 0; i < jsa.length(); i++) {
                UserBean bean = new UserBean();
                // 根据下标获取其中一个对象
                JSONObject userJson = jsa.getJSONObject(i);
                bean.setContent(userJson.getString("content"));
                bean.setComments_count(userJson.getInt("comments_count"));
                bean.setLogin(userJson.getJSONObject("user").getString("login"));
                bean.setId(userJson.getJSONObject("user").getInt("id"));
                bean.setIcon(userJson.getJSONObject("user").getString("icon"));
                bean.setUp(userJson.getJSONObject("votes").getInt("up"));
                bean.setDown(userJson.getJSONObject("votes").getInt("down"));
                list.add(bean);
                Log.i("response", bean.toString());
            }

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return list;
    }
}

UserBean.java

package com.example.bean;

import android.R.string;

public class UserBean {
        
    private String login;//用户名
    private int id;
    private int up;//支持
    private int down;//不支持
    private String content;//内容
    private int comments_count;//评论数
    private String icon;//头像
    public String getLogin() {
        return login;
    }
    public void setLogin(String login) {
        this.login = login;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getUp() {
        return up;
    }
    public void setUp(int up) {
        this.up = up;
    }
    public int getDown() {
        return down;
    }
    public void setDown(int down) {
        this.down = down;
    }
        public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
        public int getComments_count() {
        return comments_count;
    }
    public void setComments_count(int comments_count) {
        this.comments_count = comments_count;
    }
    public String getIcon() {
        return icon;
    }
    public void setIcon(String icon) {
        this.icon = icon;
    }
    @Override
    public String toString() {
        return "UserBean [login=" + login + ", id=" + id + ", up=" + up + ", down=" + down + ", content=" + content
                + ", comments_count=" + comments_count + ", icon=" + icon + "]";
    }
    
}

NetUtils.java

package com.example.utils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;

public class NetUtils {

    public String getJsonString(String path) {
        try {
            // 创建URL
            URL url = new URL(path);
            // 打开链接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            // 设置请求方法
            connection.setRequestMethod("GET");
            // 设置请求超时时间
            connection.setConnectTimeout(1000 * 10);
            connection.setReadTimeout(1000 * 10);
            // 获取响应码 200 400
            int code = connection.getResponseCode();
            if (code == 200) {
                // 得到输入流
                InputStream is = connection.getInputStream();
                // 定义缓冲区长度
                int length = 0;
                // 缓冲区
                byte[] data = new byte[1024];
                // 定义字节输出流
                ByteArrayOutputStream os = new ByteArrayOutputStream();
                while ((length = is.read(data)) != -1) {
                    // 写入到os对象中
                    os.write(data, 0, length);
                }
                byte[] byteArray = os.toByteArray();
                // 转换String字符
                String result = new String(byteArray);
                Log.e("response", result);
                return result;
            } else {
                Log.e("response", "请求失败");
            }
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }

    public Bitmap getImage(String path) {
        try {
            URL url = new URL(path);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            Bitmap bitmap = BitmapFactory.decodeStream(connection.getInputStream());
            return bitmap;
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;

    }
}

SuggestAdapter.java

package com.example.adapter;

import java.util.List;

import com.example.bean.UserBean;
import com.example.fq5.R;
import com.example.utils.NetUtils;

import android.content.Context;
import android.graphics.Bitmap;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class SuggestAdapter extends BaseAdapter {

    private Context context;
    private List<UserBean> list;
    private Handler handler;

    public SuggestAdapter(Context context, List<UserBean> list, Handler handler) {
        // TODO Auto-generated constructor stub
        this.context = context;
        this.list = list;
        this.handler = handler;
    }

    // public SuggestAdapter(Context context, List<UserBean> list) {
    // // TODO Auto-generated constructor stub
    // this.context = context;
    // this.list = list;
    // }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        final Holder holder;
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.suggest_list_item, null);
            holder = new Holder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (Holder) convertView.getTag();
        }

        UserBean bean = list.get(position);

        // 设置文本信息
        holder.login.setText(bean.getLogin());
        holder.content.setText(bean.getContent());
        holder.up.setText(bean.getUp() + "");
        holder.down.setText(bean.getDown() + "");
        holder.comments_count.setText(bean.getComments_count() + "");
        // 拼接图片请求链接
        String path = "http://pic.qiushibaike.com/system/avtnew/";
        final StringBuffer sb = new StringBuffer(path);
        String id = bean.getId() + "";
        sb.append(id.substring(0, id.length() - 4) + "/");
        sb.append(id + "/medium/");
        sb.append(bean.getIcon());
        holder.icon.setTag(sb.toString());
        new Thread() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                super.run();
                final Bitmap bitmap = new NetUtils().getImage(sb.toString());
                handler.post(new Runnable() {
                    public void run() {
                        if (holder.icon.getTag() != null && holder.icon.getTag().equals(sb.toString())) {
                            holder.icon.setImageBitmap(bitmap);
                        }
                    }
                });
            }
        }.start();
        return convertView;
    }

    class Holder {
        private TextView login;// 用户名
        private TextView content;// 内容
        private ImageView icon;// 头像
        private TextView up;// 支持
        private TextView down;// 不支持
        private TextView comments_count;// 评论数

        public Holder(View view) {
            login = (TextView) view.findViewById(R.id.suggest_item_login);
            content = (TextView) view.findViewById(R.id.suggest_item_content);
            icon = (ImageView) view.findViewById(R.id.suggest_item_icon);
            up = (TextView) view.findViewById(R.id.suggest_item_fun_tv);
            down = (TextView) view.findViewById(R.id.suggest_item_unfun_tv);
            comments_count = (TextView) view.findViewById(R.id.suggest_item_comments_tv);

        }
    }
}

suggest_list_item.xml

<?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="match_parent"
    android:padding="10dp" >

    <ImageView
        android:id="@+id/suggest_item_icon"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_launcher" />

    <!-- layout_alignTop——上对齐 -->
    <!-- layout_alignBottom——下对齐 -->

    <TextView
        android:id="@+id/suggest_item_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/suggest_item_icon"
        android:layout_alignTop="@id/suggest_item_icon"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@+id/suggest_item_icon"
        android:gravity="center"
        android:text="百里公牛" />

    <TextView
        android:id="@+id/suggest_item_content"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/suggest_item_icon"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"
        android:text="我经常幻想我走在路上,被坏人捉走关到一个地下室里,每天给我一点菜叶子吃,让我不停的跑步,做俯卧撑,准备过一个月狠毒的杀死瘦弱的没有反抗能力的我。29天后,政府捉住了坏人,捣毁了组织,八十多斤的我被救了出来,政府还发给我一千万心灵损失费,于是我就这样变得又瘦又有钱啦" />

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/suggest_item_content"
        android:layout_below="@+id/suggest_item_content" >

        <ImageView
            android:id="@+id/suggest_item_up"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:src="@drawable/operation_support" />

        <TextView
            android:id="@+id/suggest_item_fun_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@id/suggest_item_up"
            android:text="好笑" />

        <ImageView
            android:id="@+id/suggest_item_down"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_toRightOf="@id/suggest_item_fun_tv"
            android:src="@drawable/operation_unsupport" />

        <TextView
            android:id="@+id/suggest_item_unfun_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@id/suggest_item_down"
            android:text="不好笑" />
        
          <ImageView
            android:id="@+id/suggest_item_comments"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_toRightOf="@id/suggest_item_unfun_tv"
            android:src="@drawable/operation_comments" />

        <TextView
            android:id="@+id/suggest_item_comments_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@id/suggest_item_comments"
            android:text="131评论" />
    </RelativeLayout>

</RelativeLayout>

 

-------------------------------------

 

posted @ 2016-05-12 20:04  沉默的羊癫疯  阅读(284)  评论(0编辑  收藏  举报